@ditojs/admin 1.21.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10563,4 +10563,4 @@ function hh(t) {
10563
10563
  export {
10564
10564
  Fh as default
10565
10565
  };
10566
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hLmNvbXBvbmVudCwgc2NoZW1hLm5hbWUpXG4gICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5uYW1lIHx8IHNjaGVtYS5sYWJlbCB8fCBzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEuY29tcG9uZW50LCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmICghaXNGb3JtKGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKGZvcm0pfSdgKVxuICB9XG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHtcbiAgICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXJndW1lbnRzWzBdLCAxMClcbiAgfVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50VmFsdWU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWwgfHwgbmV3IERhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiBtb250aCA9PT0gdGhpcy52YWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiB5ZWFyID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUsIHN0YXRlLCBjb3B5ID0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Rpc2FibGVkJykge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0pXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKGRhdGUsIHsgeWVhciwgbW9udGgsIGRheSB9KSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBob3IsIHZlciwgZW50ZXIgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50TW9kZSwgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoaG9yIHx8IHZlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIGhvciArIHZlciAqIDdcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgaG9yICsgdmVyICogNlxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgaG9yICsgdmVyICogNVxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLnZhbHVlKSA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSkgPyAndG9kYXknXG4gICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCdcbiAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSkgPyAnY3VycmVudCdcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0Q2hpbGRcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWlucHV0XG4gIGlucHV0KFxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taW5wdXRcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGlucHV0XG4gICAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICAgIGFsbDogaW5oZXJpdFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBtYXJnaW46IDBcbiAgICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgJGF0dHJzXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgIC4uLiRhdHRyc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ2lucHV0JyBsaXN0ZW5lciBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGl0IHNlcGFyYXRlbHkgYmVsb3csXG4gICAgICAvLyBidXQgcGFzcyBvbiBhbGwgb3RoZXJzIHRvIHRoZSB3cmFwcGVkIG5hdGl2ZSBlbGVtZW50OlxuICAgICAgY29uc3QgeyBpbnB1dCwgLi4ubGlzdGVuZXJzIH0gPSB0aGlzLiRsaXN0ZW5lcnNcbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICAgIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgbWluLXdpZHRoOiAxMGVtXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgLmRpdG8tZGF0ZS1waWNrZXItcG9wdXBcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIGRhdGU6IHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pIHx8ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gIC8vIClcbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gICAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8gKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICApXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgd2lkdGg6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIG1heC13aWR0aDogMTYwcHhcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cblxuICAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHhcbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLmRpdG8taWNvbi10aW1lXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDdweFxuICAgICAgICBoZWlnaHQ6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgZmxvYXQ6IGxlZnRcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItd2lkdGg6IDAgMXB4IDBcbiAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweClcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgJjpsYXN0LWNoaWxkXG4gICAgICBib3JkZXItcmlnaHQ6IDBcbiAgICB1bFxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuXG4gICAgICBvdmVyZmxvdy15OiBhdXRvXG4gICAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWFyZ2luOiAwXG4gICAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICBwYWRkaW5nOiAwIDE3cHggMCAwXG4gICAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICYgPiBsaVxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAgICYuc2VsZWN0ZWQ6aG92ZXJcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICYuZGlzYWJsZWRcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgICAgICYuZGlzYWJsZWQ6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHtcbiAgY29weURhdGUsIHNjcm9sbFRvLCBzZXRTZWxlY3Rpb24sIGdldEtleU5hdmlnYXRpb25cbn0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuaG91cil9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgwKVxuICAgICAgfVxuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgYWxzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyAyXG4gICAgICAgICAgICA6IHZhbHVlID4gMiA/IDBcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWUgPj0gbGVuZ3RoID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvciB8fCB2ZXIgfHwgZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICByZWY9XCJwaWNrZXJcIlxuKVxuICAuZGl0by1waWNrZXJzKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICApXG4gICAgZGF0ZS1waWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICB0aW1lLXBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gICAgcmVmPVwicGlja2VyXCJcbiAgKVxuICAgIC5kaXRvLXBpY2tlcnMoXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICApXG4gICAgICBkYXRlLXBpY2tlcihcbiAgICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgKVxuICAgICAgdGltZS1waWNrZXIoXG4gICAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICB8ICAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICAgIClcbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsXG4gICAgICArZWxsaXBzaXNcbiAgICAgIG1hcmdpbjogMCAwLjVlbVxuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAuZGl0by1idXR0b25cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwc1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgICAgJi1wcmV2LFxuICAgICAgJi1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tYXJyb3dcbiAgICAgICYtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuICAgICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICAgJi1lbGxpcHNpcy1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXNcbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9uc1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgICAgJjpmb2N1c1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICY6YWN0aXZlXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuICAgICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgIHRoaXMuJGVtaXQoJ3NpemUtY2hhbmdlJywgdGhpcy5wYWdlLCBjdXJyZW50UGFnZVNpemUpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXN3aXRjaChcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIGlucHV0KFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9XCJpbnB1dFwiXG4gICAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXN3aXRjaFxuICAgIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAgIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy4gYHJlbWAgaXMgbmVlZGVkIGJlY2F1c2Ugd2VcbiAgICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAgIC0tc3dpdGNoLXdpZHRoOiA0cmVtXG4gICAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtXG4gICAgLS1zd2l0Y2gtbWFyZ2luOiAycHhcbiAgICAtLXN3aXRjaC1wYWRkaW5nOiAzcHhcbiAgICAtLXN3aXRjaC1zcGVlZDogMzAwbXNcbiAgICAtLWxhYmVsLW1hcmdpbjogMC41ZW1cblxuICAgIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKVxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KVxuICAgIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JVxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIHdpZHRoOiB2YXIoLS13aWR0aClcbiAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgdG9wOiA1MCVcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKVxuICAgIGlucHV0XG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIC4zc1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgICBmb250LXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpXG4gICAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuICAgICAgYm9yZGVyLXJhZGl1czogMC41ZW1cbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZClcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24sXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZVxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICYuZGl0by1jaGVja2VkXG4gICAgICBpbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1vZmZzZXQpKVxuICAgICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgICAgcmlnaHQ6IHVuc2V0XG4gICAgJi5kaXRvLWRpc2FibGVkXG4gICAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWRcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMudmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIGRpc2FibGVkLCAkYXR0cnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICRkdXJhdGlvbjogMC4xNXNcbiAgLmhlaWdodC1lbnRlci1hY3RpdmUsXG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtZW50ZXIgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtZW50ZXIsXG4gIC5oZWlnaHQtbGVhdmUtdG9cbiAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIHJlbmRlcjogKGNyZWF0ZUVsZW1lbnQsIGNvbnRleHQpID0+IGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgIGNvbnRleHQucHJvcHMuZW5hYmxlZFxuICAgICAgPyB7XG4gICAgICAgIHByb3BzOiB7IG5hbWU6ICdoZWlnaHQnIH0sXG4gICAgICAgIG9uOiBldmVudHNcbiAgICAgIH1cbiAgICAgIDoge30sXG4gICAgY29udGV4dC5jaGlsZHJlblxuICApXG59XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG4vLyBGb3JjZSByZXBhaW50IHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHRyaWdnZXJlZCBjb3JyZWN0bHkuXG5jb25zdCBmb3JjZVJlcGFpbnQgPSBlbGVtZW50ID0+IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0XG5cbmNvbnN0IGV2ZW50cyA9IHtcbiAgYWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lcG91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogJ2F1dG8nIH0pKVxuICB9LFxuXG4gIGVudGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHk6IG51bGwsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSkpXG4gIH0sXG5cbiAgbGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tcm9vdFxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgIClcbiAgICBkaXRvLW1lbnVcbiAgICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICAgIGRpdG8taGVhZGVyKFxuICAgICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuICAgICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgICApXG4gICAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgICApXG4gICAgICAgICAgc3BhbiBMb2dpblxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCB8fD0gJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0UGFuZWxTY2hlbWFzLCBzZXREZWZhdWx0cywgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hJywge1xuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXModGhpcy50YWJzKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFRhYiB9ID0gdGFiXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuXG4gICAgICAvLyBzZXQgYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdHModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIG5hbWUsIGRhdGFbbmFtZV0pXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLiRzZXQocmVnaXN0cnksIHVpZCwgZW50cnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRkZWxldGUocmVnaXN0cnksIHVpZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQXJyYXksIGFzQXJyYXksIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5pZiAoaW1wb3J0Lm1ldGEuaG90KSB7XG4gIC8vIFdvcmthcm91bmQgZm9yIGEgc3RyYW5nZSBWaXRlIGhvdC1yZWxvYWRpbmcgYnVnLCBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9pc3N1ZXMvNzgzOSNpc3N1ZWNvbW1lbnQtMTM0MDEwOTY3OVxuICBpbXBvcnQubWV0YS5ob3Qub24oJ3ZpdGU6YmVmb3JlVXBkYXRlJywgb25CZWZvcmVWaXRlVXBkYXRlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBhcGkudXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgVnVlKHtcbiAgICAgIGVsLFxuICAgICAgcm91dGVyOiBuZXcgVnVlUm91dGVyKHtcbiAgICAgICAgbW9kZTogJ2hpc3RvcnknLFxuICAgICAgICBiYXNlOiBkaXRvLmJhc2UsXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSksXG4gICAgICBjb21wb25lbnRzOiB7IERpdG9Sb290IH0sXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSByb290IGNvbnRhaW5lcidzIGlkLCBhcyByZXF1aXJlZCBieSBob3QtcmVsb2FkaW5nOlxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGlkOiBlbC5pZFxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgICAgLi4udHlwZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0pYClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnltb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczogaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICA/ICdpbmNsdWRlJ1xuICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICkudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBvbkJlZm9yZVZpdGVVcGRhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgLy8gUGF0Y2ggYGV2ZW50LnVwZGF0ZXNgIHRvIHJlbW92ZSB0aGUgdmVyc2lvbiBxdWVyeSBwYXJhbWV0ZXIgZnJvbSBwYXRoLFxuICAgIC8vIHNvIHRoYXQgdGhlIHVwZGF0ZSBnZXRzIHBpY2tlZCB1cC5cbiAgICAvLyBXaHkgdGhlIHN0b3JlZCBgZGVwc2AgYXJlIG1pc3NpbmcgdGhpcyBwYXJ0IG9mIHRoZSBVUkwsIEkgY2Fubm90IHNheeKAplxuICAgIGNvbnN0IHVwZGF0ZXMgPSBbXVxuICAgIGZvciAoY29uc3QgdXBkYXRlIG9mIGV2ZW50LnVwZGF0ZXMpIHtcbiAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUsIHtcbiAgICAgICAgLi4udXBkYXRlLFxuICAgICAgICBhY2NlcHRlZFBhdGg6IHVwZGF0ZS5hY2NlcHRlZFBhdGgucmVwbGFjZSgvXFw/dj1bMC05YS1mXSsmLywgJz8nKVxuICAgICAgfSlcbiAgICB9XG4gICAgZXZlbnQudXBkYXRlcyA9IHVwZGF0ZXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwiZXZlbnRzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsImFzQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwidHlwZSIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwiaGFzUmVzb3VyY2UiLCJzY2hlbWEiLCJnZXRSZXNvdXJjZSIsImRlZmF1bHRzIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5IiwiRGl0b01peGluIiwidWlkIiwia2V5T3JEYXRhUGF0aCIsImRlZiIsImNvbnZlcnRlZCIsIm5hbWUiLCJsYWJlbGl6ZSIsImJ1dHRvbiIsInZlcmIiLCJkcmFnZ2FibGUiLCJmYWxsYmFjayIsInF1ZXJ5IiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsInJlamVjdCIsIkRpdG9Db21wb25lbnQiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiZm9ybWF0IiwiYSIsImJvZHkiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJnZXRDb250ZXh0IiwicGFyYW1zIiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50IiwiaXNTaW5nbGVDb21wb25lbnRWaWV3Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsIl9iIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsImFycmF5IiwidG9TY2hlbWEiLCJjYW1lbGl6ZSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwic2NoZW1hQ29tcG9uZW50IiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwiVHlwZU1peGluIiwicGFyc2UiLCJsYWJlbCIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsImFkZCIsImVsZW1lbnQiLCJtaXhpbnMiLCJjb21wIiwiY3RvciIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJ0byIsImZyb20iLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwicmVuZGVyIiwiX3ZtIiwiX2giLCJfYyIsInN0YXRpY1JlbmRlckZucyIsIl9fdnVlMl9zY3JpcHQiLCJpc0xvYWRpbmciLCJjb3B5RGF0ZSIsImRhdGUiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwic2Nyb2xsVG8iLCJkdXJhdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlclRpY2siLCJzZXRTZWxlY3Rpb24iLCJmaWVsZCIsInN0YXJ0IiwiZW5kIiwiJGV2ZW50Iiwid2Vla2RheSIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm5ld1ZhbCIsIm9sZFZhbCIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiJCRhIiwiJCRlbCIsIiQkYyIsIiQkdiIsIiQkaSIsInNpemUiLCJ0aXRsZSIsImRpc2FibGVkIiwicmVhZG9ubHkiLCJwbGFjZWhvbGRlciIsImF1dG9jb21wbGV0ZSIsIiRhdHRycyIsImlucHV0IiwiZ2V0TGVuZ3RoIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsImRlZmF1bHRGb3JtYXRzIiwiZm9yY2UiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJlcnIiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJyb3V0ZSIsIlNwaW5uZXIiLCJQdWxzZUxvYWRlciIsImNvbG9yIiwicHJvcHMiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImRpYWxvZ0RhdGEiLCJjb250ZW50IiwiYXNPYmplY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsIlRyYW5zaXRpb25IZWlnaHQiLCJwYW5lIiwiY3VycmVudFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImRhdGFQYXRoT3JOYW1lIiwiZXhwYW5kIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3JlZiIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsInRhYlNjaGVtYSIsImJ1dHRvblNjaGVtYSIsImJ1dHRvbkRhdGFQYXRoIiwibm9kZSIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJtZXJnZSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwibmF2aWdhdGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJWdWVEcmFnZ2FibGUiLCJjaGlsZHJlblNjaGVtYSIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsImNvbHVtbiIsIm9yZGVyIiwiZXNjYXBlSHRtbCIsImgiLCJUeXBlQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIkRhdGFNaXhpbiIsInJlc29sdmVDb3VudGVyIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsIm9uQ2hhbmdlIiwib25Gb2N1cyIsIm9uQmx1ciIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsInJvdXRlQ29tcG9uZW50IiwiaW5saW5lZCIsInBhcmFtIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJnZXRQYXRoV2l0aFBhcmFtIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGVGb3JtYXQiLCJnZXRGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwicHJveHkiLCJwYXJzZUZpbHRlcnNEYXRhIiwiZ2V0RmlsdGVyc0NvbXBvbmVudHMiLCJmb3JtYXRGaWx0ZXJzRGF0YSIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiZ2V0TGlzdENvbXBvbmVudCIsIm9iaiIsImZpbHRlcnNEYXRhUGF0aCIsImljb24iLCJpc0FjdGl2ZSIsIm9uQ2xpY2siLCJFZGl0b3JDb250ZW50IiwiRWRpdG9yTWVudUJhciIsIkljb24iLCJjb21tYW5kIiwibWFya0J1dHRvbnMiLCJiYXNpY05vZGVCdXR0b25zIiwib3RoZXJOb2RlQnV0dG9ucyIsInRvb2xCdXR0b25zIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsImdldFZhbHVlIiwib25VcGRhdGUiLCJnZXRIVE1MIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiYXR0cnMiLCJkaWFsb2dDb21wb25lbnQiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiYWRkQnV0dG9uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyIiwiTWFyayIsInRvZ2dsZU1hcmsiLCJMaW5rIiwiZG9tIiwiVnVlTXVsdGlzZWxlY3QiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIiQkc2VsZWN0ZWRWYWwiLCJvIiwidmFsIiwib3B0IiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsImZpbGUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiVnVlUm91dGVyIiwiVnVlTW9kYWwiLCJWdWVOb3RpZmljYXRpb25zIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJmb3JtYXRRdWVyeSIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFlQSxLQUFBO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxpQkFBaUIsQ0FBRTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNOLFdBQVcsQ0FBRTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUNqQjtBQ0hPLFNBQVNDLEVB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Q0Esc0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EseUJBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsWUFBQWlELElBQUE7QUFBQSxRQUNBLENBQUEsY0FBQWhRLEVBQUEsS0FBQSxTQUFBLE1BQUE7QUFBQSxNQUNBO0FBQ0EsYUFBQSxLQUFBLGdCQUNBZ1EsRUFBQSxLQUFBLGVBQUEsS0FFQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsWUFBQSxLQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsS0FBQUMsR0FBQTtBQUNBLFdBQUEsWUFBQUEsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQXZCLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsTUFDQSxLQUFBLE1BQUEsZUFBQUQsQ0FBQSxHQUNBQSxLQUNBLEtBQUEsVUFBQSxNQUFBLEtBQUEsZUFBQSxDQUFBO0FBQUEsSUFHQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxVQUFBLEVBQUEsU0FBQXdCLEdBQUEsT0FBQUMsRUFBQSxJQUFBLEtBQUE7QUFDQSxRQUFBLEtBQUEsWUFBQSxTQUFBO0FBQ0EsWUFBQXJVLElBQUFvVSxFQUFBLGNBQUEsaUJBQUE7QUFDQSxNQUFBcFUsTUFDQSxLQUFBLGNB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UUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsY0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE1BQUE7QUFBQSxFQU1BO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGFBQUE7QUFDQSxZQUFBO0FBQUEsUUFDQSxJQUFBclQ7QUFBQSxRQUNBLE1BQUF1RTtBQUFBLFFBQ0EsTUFBQWhCO0FBQUEsUUFDQSxNQUFBdVU7QUFBQSxRQUNBLE9BQUFDO0FBQUEsUUFDQSxVQUFBQztBQUFBLFFBQ0EsVUFBQUM7QUFBQSxRQUNBLGFBQUFDO0FBQUEsUUFDQSxjQUFBQztBQUFBLFFBQ0EsUUFBQUM7QUFBQSxNQUNBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxJQUFBcFk7QUFBQSxRQUNBLE1BQUF1RTtBQUFBLFFBQ0EsTUFBQWhCO0FBQUEsUUFDQSxNQUFBdVU7QUFBQSxRQUNBLE9BQUFDO0FBQUEsUUFDQSxVQUFBQztBQUFBLFFBQ0EsVUFBQUM7QUFBQSxRQUNBLGFBQUFDO0FBQUEsUUFDQSxjQUFBQztBQUFBLFFBQ0EsR0FBQUM7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUdBLFlBQUEsRUFBQSxPQUFBQyxNQUFBOUcsRUFBQSxJQUFBLEtBQUE7QUFDQSxhQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFFQSxZQUFBLEVBQUEsTUFBQXVHLEdBQUEsS0FBQXZR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LEtBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsY0FBQTtBQUFBLElBQ0EsYUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsTUFBQUMsR0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxXQUFBLEdBQUEsU0FBQSxVQUFBO0FBQUEsSUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBNVMsR0FBQSxLQUFBLGNBQUE7QUFBQSxRQUNBLFFBQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsTUFDQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQWtQLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsTUFDQSxLQUFBLGVBQUFEO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQXhCLEdBQUE7QUFDQSxNQUFBLENBQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQ0EsS0FBQSxVQUFBLElBQ0EsS0FBQSxN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TUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLGNBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxXQUFBLEdBQUEsU0FBQSxVQUFBO0FBQUEsSUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQSxXQUFBLEtBQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsS0FBQSxnQkFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxlQUNBLEdBQ0EsS0FBQSxRQUFBLEtBQUEsSUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLE1BQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFDQSxLQUFBLGdCQUlBbEYsR0FBQSxJQUFBLFFBQUEsRUFBQSxNQUFBLEdBQUEsUUFBQSxHQUFBLFFBQUEsR0FBQSxhQUFBLEVBQUEsQ0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLE1BQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxTQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQUssR0FBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE1BQUFBLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBQyxHQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsUUFBQUEsR0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsV0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUFDLEdBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxRQUFBQSxHQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxNQUFBa0IsR0FBQUMsR0FBQTtBQUNBLE1BQUEsQ0FBQUQsS0FBQSxDQUFBQyxNQUNBLEtBQUEsZUFBQUQ7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBeEIsR0FBQTtBQUNBLE1BQUEsQ0FBQUEsS0FBQSxDQUFBLEtBQUEsVUFDQSxLQUFBLFVBQUEsSUFDQSxLQUFBLE1BQUEsU0FBQUEsQ0FBQSxHQUNBLEtBQUEsVUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUE7QUFBQSxJQUVBLFdBQUE7QUFBQSxJQUVBLEtBQUErQyxHQUFBO0FBQ0EsV0FBQSxZQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUF2QixHQUFBQyxHQUFBO0FBQ0EsTUFBQUQsTUFDQSxLQUFBLGdCQUFBLEdBQ0EsS0FBQSxVQUFBLENBQUEsSUFFQSxDQUFBQSxLQUFBLENBQUFDLEtBQ0EsS0FBQSxNQUFBLGVBQUFELENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxRQUFBQSxHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLEtBQ0EsS0FBQSxNQUFBRCxJQUFBLFVBQUEsTUFBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxJQUFBLFFB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QUEsR0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGVBQUEsQ0FBQTtBQUFBLE1BQ0EsWUFBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLFNBQUEsUUFBQSxTQUFBLFNBQUEsaUJBR0EsS0FBQSxTQUFBLGtCQUFBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxNQUFBLFVBQUE7QUFHQSxTQUFBLE1BQUEsVUFBQTtBQUFBLE1BQ0EsT0FBQSxDQUFBblosTUFBQTtBQUNBLFFBQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsTUFDQSxLQUFBLFNBQUEsY0FBQTtBQUFBLE1BRUE7QUFBQSxNQUVBLE9BQUEsQ0FBQUEsTUFBQTtBQUNBLFFBQUFBLEVBQUEsU0FBQSxVQUNBLEtBQUEsU0FBQSxjQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUNBLFFBQUE7QUFDQSxXQUFBLGFBQUEsSUFDQSxNQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsYUFBQSxJQUVBLE1BQUEsS0FBQSxNQUFBO0FBQUEsSUFFQSxTQUFBc1osR0FBQTtBQUNBLGNBQUEsTUFBQUEsQ0FBQTtBQUFBLElBQ0E7QUFDQSxTQUFBLGFBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQWpYLElBQUEsUUFBQSxPQUFBd1UsR0FBQSxNQUFBMEMsRUFBQSxJQUFBLElBQUE7QUFDQSxNQUFBMUMsVUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQXhVLE1BQUEsaUJBQ0FrWCxJQUFBLE1BQ0F4WCxFQUFBd1gsQ0FBQSxFQUFBLEtBQUEsVUFBQSxRQUNBLFFBQUEsZUFBQSxNQUFBO0FBQ0EsWUFBQUMsSUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQW5YLE1BQUE7QUFFQSxjQUFBbVgsR0FBQUMsR0FBQUYsQ0FBQSxDQUFBO0FBQ0EsWUFBQSxFQUFBLGVBQUFHLElBQUEsR0FBQSxJQUFBLEtBQUE7QUFDQSxVQUFBQSxHQUFBO0FBS0EsY0FBQSxFQUFBLGdCQUFBQyxJQUFBLEdBQUEsSUFBQUQsR0FDQXhHLEtBQUEsS0FBQXFHLEVBQUEsU0FBQTFDLEVBQUEsVUFBQThDO0FBQ0EsYUFBQSxRQUFBLEVBQUEsTUFBQXRYLEdBQUEsT0FBQXdVLEdBQUEsTUFBQTBDLEdBQUEsVUFBQXJHLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEscUJBQUE7QUFDQSxXQUFBLGNBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBZCxHQUFBO0FBQ0EsV0FBQSxnQkFBQUEsSUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxRQUFBOztBQUNBLFdBQUEsYUFBQTtBQUNBLFlBQUE7QUFBQSxRQUNBLHNCQUFBd0g7QUFBQSxRQUNBLG9CQUFBQztBQUFBLE1BQ0EsSUFBQSxLQUFBLFFBQUEsU0FBQSxDQUFBLEdBQ0FDLElBQUEsTUFBQSxLQUFBLFdBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxZQUNBLFdBQUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxVQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsR0FBQUY7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxRQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBO0FBQ0EsVUFBQUU7QUFDQSxZQUFBO0FBQ0EsZ0JBQUF6VixJQUFBLE1BQUEsS0FBQSxZQUFBO0FBQUEsWUFDQSxVQUFBLEtBQUEsSUFBQSxNQUFBO0FBQUEsWUFDQSxNQUFBeVY7QUFBQSxZQUNBLFVBQUE7QUFBQSxVQUNBLENBQUE7QUFDQSxVQUFBRCxJQUNBLFNBQUEsUUFBQUEsQ0FBQSxLQUVBLEtBQUEsUUFBQXhWLEVBQUEsS0FBQSxJQUFBLEdBQ0EsTUFBQSxLQUFBLGFBQUE7QUFBQSxRQUVBLFNBQUFpVixHQUFBO0FBQ0EsZ0JBQUFyWSxLQUFBaUssS0FBQXhLLElBQUE0WSxFQUFBLGFBQUEsZ0JBQUE1WSxFQUFBLFNBQUEsZ0JBQUF3SyxFQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxNQUFBakssS0FBQXFZO0FBQUEsVUFDQSxDQUFBLEdBQ0FyWSxLQUNBLFFBQUEsTUFBQXFZLEdBQUFBLEVBQUEsUUFBQSxHQUVBLEtBQUEsTUFBQTtBQUFBLFFBQ0E7QUFBQSxJQUVBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLFVBQUE7QUFLQSxTQUpBLE1BQUEsS0FBQSxZQUFBO0FBQUEsVUFDQSxVQUFBLEtBQUEsSUFBQSxNQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsUUFDQSxDQUFBLEdBQ0EsS0FBQSxZQUNBLEtBQUEsUUFBQSxJQUFBLEdBQ0EsS0FBQSxhQUFBO0FBQUEsTUFFQSxTQUFBQSxHQUFBO0FBQ0EsZ0JBQUEsTUFBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFlBQUE7QUFDQSxVQUFBUyxJQUFBO0FBQ0EsVUFBQTtBQUtBLFFBQUFBLEtBSkEsTUFBQSxLQUFBLFlBQUE7QUFBQSxVQUNBLFVBQUEsS0FBQSxJQUFBLE1BQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxRQUNBLENB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UUFFQTtBQUNBLGVBQUE2TTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBOztBQUNBLGNBQUE5YSxJQUFBLEtBQUEsV0FBQSxnQkFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLFVBQUEsWUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxTQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLGFBQUEsWUFBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQVFBLE9BQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBdEMsR0FBQSxLQUFBLFVBQUEsS0FBQSxVQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsUUFDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBNlMsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLENBQUFBLE1BQUFBLEVBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxDQUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsWUFBQXJOLE1BQUEsS0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBQSxLQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBMkQsR0FBQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLE9BQUEsT0FBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUE7QUFDQSxhQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUEsR0FDQSxLQUFBLGtCQUFBLEdBRUEsS0FBQSxTQUFBLFVBQUEsS0FBQSxxQkFBQSxHQUNBLEtBQUEsVUFBQSxZQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7QUFDQSxTQUFBLFVBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEs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O0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsSUFBQXZFLEVBQUEsTUFBQSxFQUFBLFFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEwTCxFQUFBLEtBQUEsTUFBQSxLQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsWUFBQSxFQUFBLFFBQUExSSxFQUFBLElBQUEsTUFDQSxFQUFBLE9BQUF3TixFQUFBLElBQUF4TjtBQUNBLGFBQ0F3TixNQUFBLE9BQ0EsQ0FBQSxDQUFBQSxLQUFBLEtBQUEsWUFBQSxpQkFBQSxLQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBRUEsYUFBQSxLQUFBLFNBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEzSSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUEsQ0FBQSxRQUFBLE1BQUE7QUFBQSxNQUNBLFVBQUE7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LEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGlCQUFBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUFtTCxHQUFBLEtBQUEsT0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxPQUFBLFVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsVUFBQSxLQUFBO0FBQ0EsZUFBQSxLQUFBO0FBQ0E7QUFHQSxjQUFBLEVBQUEsTUFBQXhRLE1BQUE4RCxFQUFBLElBQUEsS0FBQTtBQUNBLGVBQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFFQSxhQUFBLEtBQUEsYUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxLQUFBLFdBQUEsS0FBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE2RSxFQUFBLFdBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUE7QUFHQSxVQUFBLEVBQUEsTUFBQTNJLE1BQUEsS0FBQTtBQUNBLElBQUFBLE1BQ0EsS0FBQSxVQUFBWSxFQUFBWixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUFBLEVBRUE7QUFBQSxFQUVBLGdCQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxVQUFBMlIsR0FBQTtBQUdBLFdBQUEsZ0JBQUEsZUFBQSxNQUFBQSxDQUFB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RUFBQSxjQUFBMmMsR0FBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBTixFQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEsV0FBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxDQUFBLE9BQUEsTUFBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsT0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBdlIsRUFBQSxLQUFBLE9BQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUdBLGlCQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFB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QUFBLE1BQ0EsUUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUEsVUFBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUEsQ0FBQWlOLE1BQUEsS0FBQSxZQUFBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsV0FBQTtBQUFBLFVBR0EsY0FBQSxNQUNBLEtBQUEsaUJBQUEsS0FBQSxDQUFBN2lCLE1BQUFBLEVBQUEsUUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLFFBQUEsQ0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0Es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
10566
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hLmNvbXBvbmVudCwgc2NoZW1hLm5hbWUpXG4gICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5uYW1lIHx8IHNjaGVtYS5sYWJlbCB8fCBzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEuY29tcG9uZW50LCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmICghaXNGb3JtKGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKGZvcm0pfSdgKVxuICB9XG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHtcbiAgICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXJndW1lbnRzWzBdLCAxMClcbiAgfVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50VmFsdWU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWwgfHwgbmV3IERhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiBtb250aCA9PT0gdGhpcy52YWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiB5ZWFyID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUsIHN0YXRlLCBjb3B5ID0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Rpc2FibGVkJykge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0pXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKGRhdGUsIHsgeWVhciwgbW9udGgsIGRheSB9KSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBob3IsIHZlciwgZW50ZXIgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50TW9kZSwgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoaG9yIHx8IHZlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIGhvciArIHZlciAqIDdcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgaG9yICsgdmVyICogNlxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgaG9yICsgdmVyICogNVxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLnZhbHVlKSA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSkgPyAndG9kYXknXG4gICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCdcbiAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSkgPyAnY3VycmVudCdcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0Q2hpbGRcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWlucHV0XG4gIGlucHV0KFxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taW5wdXRcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGlucHV0XG4gICAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICAgIGFsbDogaW5oZXJpdFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBtYXJnaW46IDBcbiAgICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgJGF0dHJzXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgIC4uLiRhdHRyc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ2lucHV0JyBsaXN0ZW5lciBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGl0IHNlcGFyYXRlbHkgYmVsb3csXG4gICAgICAvLyBidXQgcGFzcyBvbiBhbGwgb3RoZXJzIHRvIHRoZSB3cmFwcGVkIG5hdGl2ZSBlbGVtZW50OlxuICAgICAgY29uc3QgeyBpbnB1dCwgLi4ubGlzdGVuZXJzIH0gPSB0aGlzLiRsaXN0ZW5lcnNcbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICAgIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgbWluLXdpZHRoOiAxMGVtXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgLmRpdG8tZGF0ZS1waWNrZXItcG9wdXBcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIGRhdGU6IHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pIHx8ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gIC8vIClcbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gICAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8gKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICApXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgd2lkdGg6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIG1heC13aWR0aDogMTYwcHhcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cblxuICAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHhcbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLmRpdG8taWNvbi10aW1lXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDdweFxuICAgICAgICBoZWlnaHQ6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgZmxvYXQ6IGxlZnRcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItd2lkdGg6IDAgMXB4IDBcbiAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweClcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgJjpsYXN0LWNoaWxkXG4gICAgICBib3JkZXItcmlnaHQ6IDBcbiAgICB1bFxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuXG4gICAgICBvdmVyZmxvdy15OiBhdXRvXG4gICAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWFyZ2luOiAwXG4gICAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICBwYWRkaW5nOiAwIDE3cHggMCAwXG4gICAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICYgPiBsaVxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAgICYuc2VsZWN0ZWQ6aG92ZXJcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICYuZGlzYWJsZWRcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgICAgICYuZGlzYWJsZWQ6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHtcbiAgY29weURhdGUsIHNjcm9sbFRvLCBzZXRTZWxlY3Rpb24sIGdldEtleU5hdmlnYXRpb25cbn0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuaG91cil9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgwKVxuICAgICAgfVxuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgYWxzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyAyXG4gICAgICAgICAgICA6IHZhbHVlID4gMiA/IDBcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWUgPj0gbGVuZ3RoID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvciB8fCB2ZXIgfHwgZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICByZWY9XCJwaWNrZXJcIlxuKVxuICAuZGl0by1waWNrZXJzKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICApXG4gICAgZGF0ZS1waWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICB0aW1lLXBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gICAgcmVmPVwicGlja2VyXCJcbiAgKVxuICAgIC5kaXRvLXBpY2tlcnMoXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICApXG4gICAgICBkYXRlLXBpY2tlcihcbiAgICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgKVxuICAgICAgdGltZS1waWNrZXIoXG4gICAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICB8ICAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICAgIClcbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsXG4gICAgICArZWxsaXBzaXNcbiAgICAgIG1hcmdpbjogMCAwLjVlbVxuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAuZGl0by1idXR0b25cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwc1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgICAgJi1wcmV2LFxuICAgICAgJi1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tYXJyb3dcbiAgICAgICYtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuICAgICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICAgJi1lbGxpcHNpcy1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXNcbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9uc1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgICAgJjpmb2N1c1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICY6YWN0aXZlXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuICAgICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgIHRoaXMuJGVtaXQoJ3NpemUtY2hhbmdlJywgdGhpcy5wYWdlLCBjdXJyZW50UGFnZVNpemUpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXN3aXRjaChcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIGlucHV0KFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9XCJpbnB1dFwiXG4gICAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXN3aXRjaFxuICAgIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAgIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy4gYHJlbWAgaXMgbmVlZGVkIGJlY2F1c2Ugd2VcbiAgICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAgIC0tc3dpdGNoLXdpZHRoOiA0cmVtXG4gICAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtXG4gICAgLS1zd2l0Y2gtbWFyZ2luOiAycHhcbiAgICAtLXN3aXRjaC1wYWRkaW5nOiAzcHhcbiAgICAtLXN3aXRjaC1zcGVlZDogMzAwbXNcbiAgICAtLWxhYmVsLW1hcmdpbjogMC41ZW1cblxuICAgIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKVxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KVxuICAgIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JVxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIHdpZHRoOiB2YXIoLS13aWR0aClcbiAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgdG9wOiA1MCVcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKVxuICAgIGlucHV0XG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIC4zc1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgICBmb250LXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpXG4gICAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuICAgICAgYm9yZGVyLXJhZGl1czogMC41ZW1cbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZClcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24sXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZVxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICYuZGl0by1jaGVja2VkXG4gICAgICBpbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1vZmZzZXQpKVxuICAgICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgICAgcmlnaHQ6IHVuc2V0XG4gICAgJi5kaXRvLWRpc2FibGVkXG4gICAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWRcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMudmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIGRpc2FibGVkLCAkYXR0cnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICRkdXJhdGlvbjogMC4xNXNcbiAgLmhlaWdodC1lbnRlci1hY3RpdmUsXG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtZW50ZXIgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtZW50ZXIsXG4gIC5oZWlnaHQtbGVhdmUtdG9cbiAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIHJlbmRlcjogKGNyZWF0ZUVsZW1lbnQsIGNvbnRleHQpID0+IGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgIGNvbnRleHQucHJvcHMuZW5hYmxlZFxuICAgICAgPyB7XG4gICAgICAgIHByb3BzOiB7IG5hbWU6ICdoZWlnaHQnIH0sXG4gICAgICAgIG9uOiBldmVudHNcbiAgICAgIH1cbiAgICAgIDoge30sXG4gICAgY29udGV4dC5jaGlsZHJlblxuICApXG59XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG4vLyBGb3JjZSByZXBhaW50IHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHRyaWdnZXJlZCBjb3JyZWN0bHkuXG5jb25zdCBmb3JjZVJlcGFpbnQgPSBlbGVtZW50ID0+IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0XG5cbmNvbnN0IGV2ZW50cyA9IHtcbiAgYWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lcG91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogJ2F1dG8nIH0pKVxuICB9LFxuXG4gIGVudGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHk6IG51bGwsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSkpXG4gIH0sXG5cbiAgbGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tcm9vdFxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgIClcbiAgICBkaXRvLW1lbnVcbiAgICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICAgIGRpdG8taGVhZGVyKFxuICAgICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuICAgICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgICApXG4gICAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgICApXG4gICAgICAgICAgc3BhbiBMb2dpblxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCB8fD0gJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0UGFuZWxTY2hlbWFzLCBzZXREZWZhdWx0cywgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hJywge1xuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXModGhpcy50YWJzKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFRhYiB9ID0gdGFiXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuXG4gICAgICAvLyBzZXQgYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdHModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIG5hbWUsIGRhdGFbbmFtZV0pXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLiRzZXQocmVnaXN0cnksIHVpZCwgZW50cnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRkZWxldGUocmVnaXN0cnksIHVpZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQXJyYXksIGFzQXJyYXksIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5pZiAoaW1wb3J0Lm1ldGEuaG90KSB7XG4gIC8vIFdvcmthcm91bmQgZm9yIGEgc3RyYW5nZSBWaXRlIGhvdC1yZWxvYWRpbmcgYnVnLCBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9pc3N1ZXMvNzgzOSNpc3N1ZWNvbW1lbnQtMTM0MDEwOTY3OVxuICBpbXBvcnQubWV0YS5ob3Qub24oJ3ZpdGU6YmVmb3JlVXBkYXRlJywgb25CZWZvcmVWaXRlVXBkYXRlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBhcGkudXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgVnVlKHtcbiAgICAgIGVsLFxuICAgICAgcm91dGVyOiBuZXcgVnVlUm91dGVyKHtcbiAgICAgICAgbW9kZTogJ2hpc3RvcnknLFxuICAgICAgICBiYXNlOiBkaXRvLmJhc2UsXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSksXG4gICAgICBjb21wb25lbnRzOiB7IERpdG9Sb290IH0sXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSByb290IGNvbnRhaW5lcidzIGlkLCBhcyByZXF1aXJlZCBieSBob3QtcmVsb2FkaW5nOlxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGlkOiBlbC5pZFxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgICAgLi4udHlwZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0pYClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnltb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczogaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICA/ICdpbmNsdWRlJ1xuICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICkudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBvbkJlZm9yZVZpdGVVcGRhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgLy8gUGF0Y2ggYGV2ZW50LnVwZGF0ZXNgIHRvIHJlbW92ZSB0aGUgdmVyc2lvbiBxdWVyeSBwYXJhbWV0ZXIgZnJvbSBwYXRoLFxuICAgIC8vIHNvIHRoYXQgdGhlIHVwZGF0ZSBnZXRzIHBpY2tlZCB1cC5cbiAgICAvLyBXaHkgdGhlIHN0b3JlZCBgZGVwc2AgYXJlIG1pc3NpbmcgdGhpcyBwYXJ0IG9mIHRoZSBVUkwsIEkgY2Fubm90IHNheeKAplxuICAgIGNvbnN0IHVwZGF0ZXMgPSBbXVxuICAgIGZvciAoY29uc3QgdXBkYXRlIG9mIGV2ZW50LnVwZGF0ZXMpIHtcbiAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpIC8vIEtlZXAgdGhlIG9yaWdpbmFsIHVwZGF0ZS5cbiAgICAgIGNvbnN0IGFjY2VwdGVkUGF0aCA9IHVwZGF0ZS5hY2NlcHRlZFBhdGgucmVwbGFjZSgvXFw/dj1bMC05YS1mXSsmL2ksICc/JylcbiAgICAgIGlmIChhY2NlcHRlZFBhdGggIT09IHVwZGF0ZS5hY2NlcHRlZFBhdGgpIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHsgLi4udXBkYXRlLCBhY2NlcHRlZFBhdGggfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZXZlbnQudXBkYXRlcyA9IHVwZGF0ZXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwiZXZlbnRzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsImFzQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwidHlwZSIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwiaGFzUmVzb3VyY2UiLCJzY2hlbWEiLCJnZXRSZXNvdXJjZSIsImRlZmF1bHRzIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5IiwiRGl0b01peGluIiwidWlkIiwia2V5T3JEYXRhUGF0aCIsImRlZiIsImNvbnZlcnRlZCIsIm5hbWUiLCJsYWJlbGl6ZSIsImJ1dHRvbiIsInZlcmIiLCJkcmFnZ2FibGUiLCJmYWxsYmFjayIsInF1ZXJ5IiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsInJlamVjdCIsIkRpdG9Db21wb25lbnQiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiZm9ybWF0IiwiYSIsImJvZHkiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJnZXRDb250ZXh0IiwicGFyYW1zIiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50IiwiaXNTaW5nbGVDb21wb25lbnRWaWV3Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsIl9iIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsImFycmF5IiwidG9TY2hlbWEiLCJjYW1lbGl6ZSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwic2NoZW1hQ29tcG9uZW50IiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwiVHlwZU1peGluIiwicGFyc2UiLCJsYWJlbCIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsImFkZCIsImVsZW1lbnQiLCJtaXhpbnMiLCJjb21wIiwiY3RvciIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJ0byIsImZyb20iLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwicmVuZGVyIiwiX3ZtIiwiX2giLCJfYyIsInN0YXRpY1JlbmRlckZucyIsIl9fdnVlMl9zY3JpcHQiLCJpc0xvYWRpbmciLCJjb3B5RGF0ZSIsImRhdGUiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwic2Nyb2xsVG8iLCJkdXJhdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlclRpY2siLCJzZXRTZWxlY3Rpb24iLCJmaWVsZCIsInN0YXJ0IiwiZW5kIiwiJGV2ZW50Iiwid2Vla2RheSIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm5ld1ZhbCIsIm9sZFZhbCIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiJCRhIiwiJCRlbCIsIiQkYyIsIiQkdiIsIiQkaSIsInNpemUiLCJ0aXRsZSIsImRpc2FibGVkIiwicmVhZG9ubHkiLCJwbGFjZWhvbGRlciIsImF1dG9jb21wbGV0ZSIsIiRhdHRycyIsImlucHV0IiwiZ2V0TGVuZ3RoIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsImRlZmF1bHRGb3JtYXRzIiwiZm9yY2UiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJlcnIiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJyb3V0ZSIsIlNwaW5uZXIiLCJQdWxzZUxvYWRlciIsImNvbG9yIiwicHJvcHMiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImRpYWxvZ0RhdGEiLCJjb250ZW50IiwiYXNPYmplY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsIlRyYW5zaXRpb25IZWlnaHQiLCJwYW5lIiwiY3VycmVudFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImRhdGFQYXRoT3JOYW1lIiwiZXhwYW5kIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3JlZiIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsInRhYlNjaGVtYSIsImJ1dHRvblNjaGVtYSIsImJ1dHRvbkRhdGFQYXRoIiwibm9kZSIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJtZXJnZSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwibmF2aWdhdGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJWdWVEcmFnZ2FibGUiLCJjaGlsZHJlblNjaGVtYSIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsImNvbHVtbiIsIm9yZGVyIiwiZXNjYXBlSHRtbCIsImgiLCJUeXBlQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIkRhdGFNaXhpbiIsInJlc29sdmVDb3VudGVyIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsIm9uQ2hhbmdlIiwib25Gb2N1cyIsIm9uQmx1ciIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsInJvdXRlQ29tcG9uZW50IiwiaW5saW5lZCIsInBhcmFtIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJnZXRQYXRoV2l0aFBhcmFtIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGVGb3JtYXQiLCJnZXRGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwicHJveHkiLCJwYXJzZUZpbHRlcnNEYXRhIiwiZ2V0RmlsdGVyc0NvbXBvbmVudHMiLCJmb3JtYXRGaWx0ZXJzRGF0YSIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiZ2V0TGlzdENvbXBvbmVudCIsIm9iaiIsImZpbHRlcnNEYXRhUGF0aCIsImljb24iLCJpc0FjdGl2ZSIsIm9uQ2xpY2siLCJFZGl0b3JDb250ZW50IiwiRWRpdG9yTWVudUJhciIsIkljb24iLCJjb21tYW5kIiwibWFya0J1dHRvbnMiLCJiYXNpY05vZGVCdXR0b25zIiwib3RoZXJOb2RlQnV0dG9ucyIsInRvb2xCdXR0b25zIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsImdldFZhbHVlIiwib25VcGRhdGUiLCJnZXRIVE1MIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiYXR0cnMiLCJkaWFsb2dDb21wb25lbnQiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiYWRkQnV0dG9uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyIiwiTWFyayIsInRvZ2dsZU1hcmsiLCJMaW5rIiwiZG9tIiwiVnVlTXVsdGlzZWxlY3QiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIiQkc2VsZWN0ZWRWYWwiLCJvIiwidmFsIiwib3B0IiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsImZpbGUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiVnVlUm91dGVyIiwiVnVlTW9kYWwiLCJWdWVOb3RpZmljYXRpb25zIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJmb3JtYXRRdWVyeSIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFlQSxLQUFBO0FBQUEsRUFD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RUEsVUFBQUUsR0FBQTtBQUNBLFlBQUEsRUFBQSxjQUFBQyxFQUFBLElBQUEsTUFDQSxFQUFBLE1BQUE1QixHQUFBLE9BQUFDLEVBQUEsSUFBQSxLQUFBO0FBQUEsUUFDQTJCLEVBQUEsWUFBQTtBQUFBLFFBQ0FBLEVBQUEsU0FBQSxJQUFBRDtBQUFBLE1BQ0E7QUFDQSxXQUFBLFFBQUE7QUFBQSxRQUNBLE9BQUExQjtBQUFBLFFBQ0EsS0FBQSxLQUFBO0FBQUEsVUFDQSxLQUFBLGVBQUFELEdBQUFDLENBQUE7QUFBQSxVQUNBLEtBQUEsYUFBQSxRQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUEwQixHQUFBO0FBQ0EsV0FBQSxRQUFBO0FBQUEsUUFDQSxNQUFBLEtBQUEsYUFBQSxZQUFBLElBQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTVCLEdBQUE4QixHQUFBN0csSUFBQSxJQUFBO0FBQ0EsTUFBQTZHLE1BQUEsZUFDQTdHLElBQ0EsS0FBQSxRQUFBO0FBQUEsUUFDQSxNQUFBK0UsRUFBQSxZQUFBO0FBQUEsUUFDQSxPQUFBQSxFQUFBLFNBQUE7QUFBQSxRQUNBLEtBQUFBLEVBQUEsUUFBQTtBQUFBLE1BQ0EsQ0FBQSxJQUVBLEtBQUEsZUFBQUEsR0FFQSxLQUFBLE1BQUEsU0FBQSxLQUFBLFlBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxZQUFBRSxHQUFBO0FBQ0EsV0FBQSxRQUFBLEtBQUEsR0FHQSxLQUFBLFFBQUEsRUFBQSxPQUFBQSxHQUFBLEtBQUEsRUFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQUQsR0FBQTtBQUNBLFdBQUEsUUFBQSxPQUFBLEdBQ0EsS0FBQSxRQUFBLEVBQUEsTUFBQUEsR0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUFBLEdBQUFDLEdBQUE7QUFDQSxhQUFBQSxJQUFBLE1BQ0FELEtBQ0FDLElBQUEsS0FDQUEsSUFBQSxNQUNBRCxLQUNBQyxJQUFBLEtBRUEsRUFBQSxNQUFB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QSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0Esc0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EseUJBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsWUFBQWlELElBQUE7QUFBQSxRQUNBLENBQUEsY0FBQWhRLEVBQUEsS0FBQSxTQUFBLE1BQUE7QUFBQSxNQUNBO0FBQ0EsYUFBQSxLQUFBLGdCQUNBZ1EsRUFBQSxLQUFBLGVBQUEsS0FFQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsWUFBQSxLQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsS0FBQUMsR0FBQTtBQUNBLFdBQUEsWUFBQUEsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQXZCLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsTUFDQSxLQUFBLE1BQUEsZUFBQUQsQ0FBQSxHQUNBQSxLQUNBLEtBQUEsVUFBQSxNQUFBLEtBQUEsZUFBQSxDQUFBO0FBQUEsSUFHQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxVQUFBLEVBQUEsU0FB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QUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsTUFBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsSUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsY0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE1BQUE7QUFBQSxFQU1BO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGFBQUE7QUFDQSxZQUFBO0FBQUEsUUFDQSxJQUFBclQ7QUFBQSxRQUNBLE1BQUF1RTtBQUFBLFFBQ0EsTUFBQWhCO0FBQUEsUUFDQSxNQUFBdVU7QUFBQSxRQUNBLE9BQUFDO0FBQUEsUUFDQSxVQUFBQztBQUFBLFFBQ0EsVUFBQUM7QUFBQSxRQUNBLGFBQUFDO0FBQUEsUUFDQSxjQUFBQztBQUFBLFFBQ0EsUUFBQUM7QUFBQSxNQUNBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxJQUFBcFk7QUFBQSxRQUNBLE1BQUF1RTtBQUFBLFFBQ0EsTUFBQWhCO0FBQUEsUUFDQSxNQUFBdVU7QUFBQSxRQUNBLE9BQUFDO0FBQUEsUUFDQSxVQUFBQztBQUFBLFFBQ0EsVUFBQUM7QUFBQSxRQUNBLGFBQUFDO0FBQUEsUUFDQSxjQUFBQztBQUFBLFFBQ0EsR0FBQUM7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFB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TUFBQUMsS0FBQTtBQUFBLEVBQ0EsWUFBQSxFQUFBLFNBQUFrRixJQUFBLFVBQUFDLElBQUEsWUFBQUMsRUFBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsTUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsY0FBQTtBQUFBLElBQ0EsYUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsTUFBQUMsR0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxXQUFBLEdBQUEsU0FBQSxVQUFBO0FBQUEsSUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBNVMsR0FBQSxLQUFBLGNBQUE7QUFBQSxRQUNBLFFBQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsTUFDQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQWtQLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtB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LEVBQ0EsWUFBQSxFQUFBLFNBQUFrRixJQUFBLFlBQUFFLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLE1BQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLGNBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxXQUFBLEdBQUEsU0FBQSxVQUFBO0FBQUEsSUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQSxXQUFBLEtBQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsS0FBQSxnQkFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxlQUNBLEdBQ0EsS0FBQSxRQUFBLEtBQUEsSUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLE1BQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFDQSxLQUFBLGdCQUlBbEYsR0FBQSxJQUFBLFFBQUEsRUFBQSxNQUFBLEdBQUEsUUFBQSxHQUFBLFFBQUEsR0FBQSxhQUFBLEVBQUEsQ0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLE1BQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxTQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQUssR0FBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE1BQUFBLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBQyxHQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsUUFBQUEsR0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsV0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUFDLEdBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxRQUFBQSxHQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxNQUFBa0IsR0FBQUMsR0FBQTtBQUNBLE1BQUEsQ0FBQUQsS0FBQSxDQUFBQyxNQUNBLEtBQUEsZUFBQUQ7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBeEIsR0FBQTtBQUNBLE1BQUEsQ0FBQUEsS0FBQSxDQUFBLEtBQUEsVUFDQSxLQUFBLFVBQUEsSUFDQSxLQUFBLE1BQUEsU0FBQUEsQ0FBQSxHQUNBLEtBQUEsVUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUE7QUFBQSxJQUVBLFdBQUE7QUFBQSxJQUVBLEtBQUErQyxHQUFBO0FBQ0EsV0FBQSxZQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUF2QixHQUFBQyxHQUFBO0FBQ0EsTUFBQUQsTUFDQSxLQUFBLGdCQUFBLEdBQ0EsS0FBQSxVQUFBLENBQUEsSUFFQSxDQUFBQSxLQUFBLENBQUFDLEtBQ0EsS0FBQSxNQUFBLGVBQUFELENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxRQUFBQSxHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLEtBQ0EsS0FBQSxNQUFBRCxJQUFBLFVBQUEsTUFBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLE1BQUEsS0FBQSxZQUNBLEtBQUEsVUFBQSxJQUNBLEtBQUEsTUFBQSxVQUFBLEtBQUEsWUFBQTtBQUFBLElBRUEsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFFBQUF4VSxHQUFBO0FBQ0EsY0FBQSxNQUFBQSxHQUFBLE1BQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUEyVSxHQUFBO0FBQ0EsV0FBQSxlQUFBNUIsR0FBQSxLQUFBLGFBQUE7QUFBQSxRQUNBLEdBQUE0QjtBQUFBLFFBQ0EsYUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBd0QsSUFBQSxJQUFBO0FBQ0EsVUFBQSxLQUFBLGFBQUFBLEdBQUE7QUFDQSxjQUFBbEUsSUFBQSxJQUFBLEtBQUE7QUFDQSxhQUFBLFVBQUEsTUFBQUYsR0FBQSxLQUFBLE1BQUEsT0FBQUUsR0FBQUEsSUFBQSxDQUFBLENBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQUwsSUFBQSxLQUFBO0FBQ0EsWUFBQXdFLElBQUEsQ0FBQUMsR0FBQXJZLE1BQUE7QUFDQSxjQUFBNEIsSUFBQSxLQUFBLE1BQUF5VztBQUNBLFlBQUF6VyxHQUFBO0FBRUEsZ0JBQUEwVyxJQUFBMVcsRUFBQSxnQkFBQUEsRUFBQSxTQUFBLFNBQUE7QUFDQSxVQUFBK1IsR0FBQS9SLEdBQUEsS0FBQSxNQUFBNUIsSUFBQXNZLENBQUEsR0FBQTFFLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUNBLFdBQUEsVUFBQSxNQUFBO0FBQ0EsUUFBQXdFLEVBQUEsUUFBQSxLQUFBLElBQUEsR0FDQUEsRUFBQSxVQUFBLEtBQUEsTUFBQSxHQUNBQSxFQUFBLFVBQUEsS0FBQSxNQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTFYLEdBQUE7QUFDQSxZQUFBNlgsSUFBQSxDQUFBLFFBQUEsVUFBQSxRQUFBLEVBQUEsS0FBQTtBQUNBLFVBQUFBLEdBQUE7QUFDQSxjQUFBLEVBQUEsS0FBQXhELEdBQUEsS0FBQUMsR0FBQSxPQUFBQyxFQUFBLElBQUF2QixHQUFBaFQsQ0FBQTtBQUNBLFlBQUFxVSxHQUFBO0FBQ0EsZ0JBQUEvVSxJQUFBLEtBQUEsWUFBQStVO0FBQ0EsZUFBQSxZQUNBL1UsSUFBQSxJQUFBLElBQ0FBLElBQUEsSUFBQSxJQUNBQTtBQUFBLFFBQ0EsV0FBQWdWLEdBQUE7QUFDQSxnQkFBQWhWLElBQUEsS0FBQXVZLEtBQUF2RCxHQUNBLEVBQUEsUUFBQXdELEVBQUEsSUFBQSxLQUFBLE1BQUFELEdBQUE7QUFDQSxlQUFBQSxLQUNBdlksSUFBQSxJQUFBQSxJQUFBd1ksSUFDQXhZLEtBQUF3WSxJQUFBeFksSUFBQXdZLElBQ0F4WTtBQUFBLFFBQ0E7QUFDQSxRQUFBaVYsTUFDQSxLQUFBLFlBQUEsTUFFQUYsS0FBQUMsS0FBQUMsT0FDQSxLQUFBLGdCQUFBLEVBQUEsR0FDQXZVLEVBQUEsZUFBQTtBQUFBLE1BRUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsV0FBQSxNQUFBLE1BQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxXQUFBLE1BQUEsTUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL1ZBLElBQUk4UixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQRSxJQUFHRixFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0MsRUFBRyxPQUFPO0FBQUEsSUFDZixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGNBQWNGLEVBQUk7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsR0FBRSxDQUFDRSxFQUFHLGVBQWVGLEVBQUksR0FBRztBQUFBLElBQzNCLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNMLFdBQWE7QUFBQSxNQUNiLFFBQVVBLEVBQUksTUFBTTtBQUFBLE1BQ3BCLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixlQUFlLFNBQVUwQixHQUFRO0FBQy9CLFFBQUExQixFQUFJLFdBQVcwQjtBQUFBLE1BQ2hCO0FBQUEsTUFDRCxPQUFTLFNBQVVBLEdBQVE7QUFDekIsUUFBQTFCLEVBQUksY0FBYztBQUFBLE1BQ25CO0FBQUEsTUFDRCxNQUFRLFNBQVUwQixHQUFRO0FBQ3hCLFFBQUExQixFQUFJLGNBQWM7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVTJFLEdBQUs7QUFDdkIsUUFBQTNFLEVBQUksZUFBZTJFO0FBQUEsTUFDcEI7QUFBQSxNQUNELFlBQVk7QUFBQSxJQUNiO0FBQUEsRUFDRixHQUFFLGVBQWU7QUFBQSxJQUNoQixZQUFZM0UsRUFBSTtBQUFBLElBQ2hCLGFBQWFBLEVBQUk7QUFBQSxJQUNqQixRQUFRQSxFQUFJO0FBQUEsSUFDWixZQUFZQSxFQUFJO0FBQUEsSUFDaEIsVUFBVUEsRUFBSTtBQUFBLEVBQ2xCLEdBQUssRUFBSyxDQUFDLEdBQUdFLEVBQUcsZUFBZUYsRUFBSSxHQUFHO0FBQUEsSUFDbkMsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLE1BQ0wsYUFBZTtBQUFBLE1BQ2YsV0FBYTtBQUFBLE1BQ2IsUUFBVUEsRUFBSSxNQUFNO0FBQUEsTUFDcEIsTUFBUUEsRUFBSTtBQUFBLElBQ2I7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLGVBQWUsU0FBVTBCLEdBQVE7QUFDL0IsUUFBQTFCLEVBQUksV0FBVzBCO0FBQUEsTUFDaEI7QUFBQSxNQUNELE9BQVMsU0FBVUEsR0FBUTtBQUN6QixRQUFBMUIsRUFBSSxjQUFjO0FBQUEsTUFDbkI7QUFBQSxNQUNELE1BQVEsU0FBVTBCLEdBQVE7QUFDeEIsUUFBQTFCLEVBQUksY0FBYztBQUFBLE1BQ25CO0FBQUEsSUFDRjtBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ0wsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsVUFBVSxTQUFVMkUsR0FBSztBQUN2QixRQUFBM0UsRUFBSSxlQUFlMkU7QUFBQSxNQUNwQjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNGLEdBQUUsZUFBZTtBQUFBLElBQ2hCLFlBQVkzRSxFQUFJO0FBQUEsSUFDaEIsVUFBVUEsRUFBSTtBQUFBLEVBQ2YsR0FBRSxFQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEdBQ0lHLEtBQWtCLENBQUU7QUNoQnhCLE1BQUFDLEtBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxZQUFBNEYsSUFBQSxZQUFBQyxHQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxNQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsTUFBQVIsR0FBQSxLQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLE1BQUExRCxHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLE1BQ0EsS0FBQSxlQUFBRDtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUF4QixHQUFBO0FBQ0EsTUFBQSxDQUFBQSxLQUFBLENBQUEsS0FBQSxVQUNBLEtBQUEsVUFBQSxJQUNBLEtBQUEsTUFBQSxTQUFBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQXdCLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsS0FDQSxLQUFBLE1BQUFELElBQUEsVUFBQSxNQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsTUFBQSxLQUFBLFlBQ0EsS0FBQSxVQUFBLElBQ0EsS0FBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsSUFFQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLFdBQUEsTUFBQSxLQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsV0FBQSxNQUFBLEtBQUEsS0FBQSxHQUNBLEtBQUEsTUFBQSxLQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoSUEsSUFBSWhDLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1BFLElBQUdGLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPQyxFQUFHLEtBQUs7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLE9BQU8sYUFBYUYsRUFBSTtBQUFBLEVBQzVCLENBQUc7QUFDSCxHQUNJRyxLQUFrQixDQUFFO0FDT3hCLE1BQUFDLEtBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLE1BQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFVBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QkEsSUFBSUwsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUEUsSUFBR0YsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU9DLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2QsR0FBRSxDQUFDRixFQUFJLFlBQVlFLEVBQUcsT0FBTztBQUFBLElBQzVCLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNGLEVBQUksUUFBUSxJQUFJLENBQUNBLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLEtBQUssSUFBSSxRQUFRQSxFQUFJLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDQSxFQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUdBLEVBQUksR0FBRyxRQUFRQSxFQUFJLEdBQUdBLEVBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUlBLEVBQUksR0FBSSxHQUFFRSxFQUFHLE9BQU87QUFBQSxJQUN2SixhQUFhO0FBQUEsRUFDZCxHQUFFRixFQUFJLEdBQUdBLEVBQUksV0FBVyxTQUFVa0csR0FBTTtBQUN2QyxXQUFPaEcsRUFBRyxVQUFVO0FBQUEsTUFDbEIsYUFBYTtBQUFBLE1BQ2IsT0FBT0YsRUFBSSxhQUFha0csQ0FBSTtBQUFBLE1BQzVCLE9BQU87QUFBQSxRQUNMLFVBQVlBLEVBQUs7QUFBQSxNQUNsQjtBQUFBLE1BQ0QsSUFBSTtBQUFBLFFBQ0YsT0FBUyxTQUFVeEUsR0FBUTtBQUN6QixpQkFBTzFCLEVBQUksWUFBWWtHLENBQUk7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxJQUNQLEdBQU8sQ0FBQ0EsRUFBSyxPQUFPaEcsRUFBRyxRQUFRLENBQUNGLEVBQUksR0FBR0EsRUFBSSxHQUFHa0csRUFBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUlsRyxFQUFJLEdBQUksQ0FBQSxDQUFDO0FBQUEsRUFDdkUsQ0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ1QsR0FDSUcsS0FBa0IsQ0FBRTtBQ2lDeEIsTUFBQUMsS0FBQTtBQUFBLEVBQ0EsT0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEVBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsV0FBQSxDQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxpQkFBQSxLQUFBO0FBQUEsTUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLGNBQUEsS0FBQSxjQUFBLEtBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBLEtBQUEsSUFBQSxLQUFBLFFBQUEsS0FBQSxrQkFBQSxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFFQSxLQUFBOEYsR0FBQTtBQUNBLFdBQUEsY0FBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBQyxHQUFBO0FBQ0EsV0FBQSxrQkFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQUMsR0FBQTtBQUNBLFdBQUEsV0FBQSxLQUFBLEtBQUEsS0FBQSxRQUFBQSxDQUFBLEdBQ0EsS0FBQSxjQUFBLEtBQUEsYUFDQSxLQUFBLGNBQUEsS0FBQSxXQUVBLEtBQUEsZ0JBQUEsR0FDQSxLQUFBLE1BQUEsZUFBQSxLQUFBLE1BQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBckUsR0FBQUMsR0FBQTtBQUNBLE1BQUFELE1BQUFDLE1BQ0EsS0FBQSxnQkFBQSxHQUNBLEtBQUEsTUFBQSxlQUFBRCxDQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLGNBQUEsS0FBQSxNQUNBLEtBQUEsa0JBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLGdCQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsWUFBQW1FLEdBQUE7QUFDQSxNQUFBQSxFQUFBLFNBQUEsQ0FBQUEsRUFBQSxZQUFBQSxFQUFBLFVBQUEsS0FBQSxnQkFDQSxLQUFBLGNBQUFBLEVBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBQSxHQUFBO0FBQ0EsWUFBQTdDLElBQUE7QUFBQSxRQUNBLGlCQUFBNkMsRUFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBQSxFQUFBLFNBQ0E3QyxFQUFBLGVBQUE2QyxFQUFBLFVBQUEsS0FFQTdDO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUE7QUFDQSxZQUFBLEVBQUEsVUFBQWdELEdBQUEsVUFBQUMsR0FBQSxPQUFBQyxHQUFBLGlCQUFBSCxHQUFBLGFBQUFJLEVBQUEsSUFBQSxNQUNBQyxJQUFBSixJQUFBQyxJQUFBLEdBQ0FJLElBQUEsS0FBQSxXQUFBLEtBQUEsS0FBQUgsSUFBQUgsQ0FBQTtBQUVBLFVBQUE1RSxJQUFBLEdBQ0FDLElBQUE7QUFDQSxNQUFBaUYsS0FBQUQsSUFDQWhGLElBQUFpRixJQUNBRixLQUFBSCxJQUFBLElBQ0E1RSxJQUFBZ0YsSUFDQUQsS0FBQUUsSUFBQUosS0FDQTdFLElBQUFpRixHQUNBbEYsSUFBQWtGLElBQUFELElBQUEsTUFFQWpGLElBQUFnRixJQUFBSCxHQUNBNUUsSUFBQStFLElBQUFGO0FBR0EsWUFBQUssSUFBQSxDQUFBO0FBQ0EsTUFBQUEsRUFBQSxLQUFBO0FBQUEsUUFDQSxPQUFBSCxJQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxVQUFBQSxLQUFBO0FBQUEsTUFDQSxDQUFBLEdBQ0FoRixLQUFBLEtBQ0FtRixFQUFBLEtBQUEsRUFBQSxPQUFBLEdBQUEsTUFBQSxHQUFBLEdBRUFuRixJQUFBLEtBQ0FtRixFQUFBLEtBQUE7QUFBQSxRQUNBLE9BQUEsS0FBQSxJQUFBLEdBQUFILElBQUEsRUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUVBLGVBQUFqSCxJQUFBaUMsR0FBQWpDLEtBQUFrQyxHQUFBbEM7QUFDQSxRQUFBb0gsRUFBQSxLQUFBO0FBQUEsVUFDQSxPQUFBcEg7QUFBQSxVQUNBLE1BQUFBO0FBQUEsVUFDQSxRQUFBQSxNQUFBaUg7QUFBQSxRQUNBLENBQUE7QUFFQSxNQUFBL0UsSUFBQWlGLElBQUEsS0FDQUMsRUFBQSxLQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUEsSUFBQUQsR0FBQUYsSUFBQSxFQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsTUFDQSxDQUFBLEdBRUEvRSxLQUFBaUYsSUFBQSxLQUNBQyxFQUFBLEtBQUEsRUFBQSxPQUFBRCxHQUFBLE1BQUFBLEdBQUEsR0FFQUMsRUFBQSxLQUFBO0FBQUEsUUFDQSxPQUFBSCxJQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxVQUFBQSxLQUFBRTtBQUFBLE1BQ0EsQ0FBQSxHQUVBLEtBQUEsWUFBQUM7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzTUEsSUFBSTVHLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1BFLElBQUdGLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLE9BQU9GLEVBQUk7QUFBQSxJQUNYLE9BQU9BLEVBQUk7QUFBQSxFQUNmLEdBQUssQ0FBQ0UsRUFBRyxPQUFPO0FBQUEsSUFDWixhQUFhO0FBQUEsRUFDZCxHQUFFLENBQUNBLEVBQUcsU0FBU0YsRUFBSSxHQUFHO0FBQUEsSUFDckIsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPQSxFQUFJO0FBQUEsTUFDWCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLElBQ1Q7QUFBQSxJQUNELFVBQVU7QUFBQSxNQUNSLFNBQVcsTUFBTSxRQUFRQSxFQUFJLE9BQU8sSUFBSUEsRUFBSSxHQUFHQSxFQUFJLFNBQVMsSUFBSSxJQUFJLEtBQUtBLEVBQUk7QUFBQSxJQUM5RTtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsUUFBVSxTQUFVMEIsR0FBUTtBQUMxQixZQUFJOEMsSUFBTXhFLEVBQUksU0FDWnlFLElBQU8vQyxFQUFPLFFBQ2RnRCxJQUFNLEVBQUFELEVBQUs7QUFDYixZQUFJLE1BQU0sUUFBUUQsQ0FBRyxHQUFHO0FBQ3RCLGNBQUlHLElBQU0sTUFDUkMsSUFBTTVFLEVBQUksR0FBR3dFLEdBQUtHLENBQUc7QUFDdkIsVUFBSUYsRUFBSyxVQUNQRyxJQUFNLE1BQU01RSxFQUFJLFVBQVV3RSxFQUFJLE9BQU8sQ0FBQ0csQ0FBRyxDQUFDLEtBRTFDQyxJQUFNLE9BQU81RSxFQUFJLFVBQVV3RSxFQUFJLE1BQU0sR0FBR0ksQ0FBRyxFQUFFLE9BQU9KLEVBQUksTUFBTUksSUFBTSxDQUFDLENBQUM7QUFBQSxRQUVsRjtBQUNVLFVBQUE1RSxFQUFJLFVBQVUwRTtBQUFBLE1BRWpCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxTQUFTMUUsRUFBSSxZQUFZLEVBQUssQ0FBQyxHQUFHRSxFQUFHLE9BQU87QUFBQSxJQUM3QyxhQUFhO0FBQUEsRUFDZCxDQUFBLEdBQUdGLEVBQUksU0FBU0UsRUFBRyxRQUFRO0FBQUEsSUFDMUIsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0YsRUFBSSxVQUFVQSxFQUFJLEdBQUcsV0FBVyxXQUFZO0FBQzlDLFdBQU8sQ0FBQ0EsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksT0FBTyxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDbkQsQ0FBQSxJQUFJQSxFQUFJLEdBQUcsYUFBYSxXQUFZO0FBQ25DLFdBQU8sQ0FBQ0EsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksT0FBTyxhQUFhLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDekQsQ0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUksQ0FBQSxDQUFDLENBQUMsQ0FBQztBQUN2QixHQUNJRyxLQUFrQixDQUFFO0FDa0R4QixNQUFBQyxLQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsSUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE9BQUEsR0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsU0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQXdHLEdBQUEsVUFBQTdCLEVBQUEsSUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLGdCQUFBNkI7QUFBQSxRQUNBLGlCQUFBN0I7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLFlBQUEsRUFBQSxRQUFBLEVBQUEsU0FBQTZCLEdBQUEsV0FBQUMsRUFBQSxJQUFBLENBQUEsRUFBQSxJQUFBLE1BRUFkLElBQUEsS0FBQSxJQUFBLEdBQUFhLEtBQUEsZ0JBQUFBLEVBQUEsUUFBQUMsS0FBQSxnQkFBQUEsRUFBQSxNQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0Esa0JBQUFkLElBQUEsR0FBQUEsSUFBQSxXQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxZQUFBLEVBQUEsSUFBQWhaLEdBQUEsTUFBQXVFLEdBQUEsVUFBQXlULEdBQUEsUUFBQUksRUFBQSxJQUFBO0FBQ0EsYUFBQSxFQUFBLElBQUFwWSxHQUFBLE1BQUF1RSxHQUFBLFVBQUF5VCxHQUFBLEdBQUFJLEVBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQTVYLEdBQUE7QUFDQSxXQUFBLFVBQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQXFaLEdBQUE7QUFDQSxNQUFBQSxNQUFBLEtBQUEsVUFDQSxLQUFBLE1BQUEsU0FBQUEsQ0FBQSxHQUNBLEtBQUEsTUFBQSxVQUFBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFFBQUE7QUFDQSxXQUFBLE1BQUEsTUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUlBLE1BQUF4RyxLQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFFBQUEsQ0FBQTBHLEdBQUEzWixNQUFBMlo7QUFBQSxJQUNBO0FBQUEsSUFDQTNaLEVBQUEsTUFBQSxVQUNBO0FBQUEsTUFDQSxPQUFBLEVBQUEsTUFBQSxTQUFBO0FBQUEsTUFDQSxJQUFBbUI7QUFBQSxJQUNBLElBQ0EsQ0FBQTtBQUFBLElBQ0FuQixFQUFBO0FBQUEsRUFDQTtBQUNBLEdBRUE0WixJQUFBLENBQUF2SSxHQUFBd0ksTUFBQSxPQUFBLE9BQUF4SSxFQUFBLE9BQUF3SSxDQUFBLEdBR0FDLEtBQUEsQ0FBQXpJLE1BQUEsaUJBQUFBLENBQUEsRUFBQSxRQUVBbFEsS0FBQTtBQUFBLEVBQ0EsV0FBQWtRLEdBQUE7QUFJQSxlQUFBLE1BQUF1SSxFQUFBdkksR0FBQSxFQUFBLFFBQUEsT0FBQSxDQUFBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxNQUFBQSxHQUFBO0FBQ0EsVUFBQSxFQUFBLE9BQUEwSSxFQUFBLElBQUEsaUJBQUExSSxDQUFBO0FBQ0EsSUFBQXVJLEVBQUF2SSxHQUFBO0FBQUEsTUFDQSxPQUFBMEk7QUFBQSxNQUNBLFVBQUE7QUFBQSxNQUNBLFlBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBLENBQUE7QUFDQSxVQUFBLEVBQUEsUUFBQUMsRUFBQSxJQUFBLGlCQUFBM0ksQ0FBQTtBQUNBLElBQUF1SSxFQUFBdkksR0FBQTtBQUFBLE1BQ0EsT0FBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLE1BQ0EsWUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLElBQ0EsQ0FBQSxHQUNBeUksR0FBQXpJLENBQUEsR0FDQSxXQUFBLE1BQUF1SSxFQUFBdkksR0FBQSxFQUFBLFFBQUEySSxFQUFBLENBQUEsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE1BQUEzSSxHQUFBO0FBQ0EsVUFBQSxFQUFBLFFBQUEySSxFQUFBLElBQUEsaUJBQUEzSSxDQUFBO0FBQ0EsSUFBQXVJLEVBQUF2SSxHQUFBLEVBQUEsUUFBQTJJLEdBQUEsR0FDQUYsR0FBQXpJLENBQUEsR0FDQSxXQUFBLE1BQUF1SSxFQUFBdkksR0FBQSxFQUFBLFFBQUEsRUFBQSxDQUFBLENBQUE7QUFBQSxFQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0N2RWU0SSxJQUFBO0FBQUEsRUFDYixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsYUFBYSxDQUFFO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBQUEsRUFFRCxnQkFBZ0I7QUFDZCxlQUFXLEVBQUUsUUFBQUMsT0FBWSxLQUFLO0FBQzVCLE1BQUFBLEVBQVE7QUFFVixTQUFLLGNBQWMsQ0FBRTtBQUFBLEVBQ3RCO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxNQUFNN0ksR0FBU2xPLEdBQU1nWCxHQUFTO0FBQzVCLFlBQU10WSxJQUFTK1I7QUFBQSxRQUNidkM7QUFBQSxRQUNBL08sRUFBU2EsQ0FBSSxJQUFJQSxJQUFPLEVBQUUsQ0FBQ0EsSUFBT2dYLEVBQVM7QUFBQSxNQUM1QztBQUNELGtCQUFLLFlBQVksS0FBS3RZLENBQU0sR0FDckJBO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDSDtBQzVCQSxJQUFJK1EsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUEUsSUFBR0YsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU9DLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxpQkFBaUI7QUFBQSxJQUN0QixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxVQUFZO0FBQUEsTUFDWixTQUFXO0FBQUEsSUFDWjtBQUFBLEVBQ0YsQ0FBQSxHQUFHQSxFQUFHLFdBQVcsR0FBR0EsRUFBRyxRQUFRO0FBQUEsSUFDOUIsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxlQUFlO0FBQUEsSUFDcEIsT0FBTztBQUFBLE1BQ0wsU0FBV0YsRUFBSSxRQUFRO0FBQUEsTUFDdkIsV0FBYUEsRUFBSTtBQUFBLElBQ2xCO0FBQUEsRUFDTCxHQUFLLENBQUNBLEVBQUksT0FBT0UsRUFBRyxjQUFjLElBQUlGLEVBQUksYUFBYUUsRUFBRyxLQUFLO0FBQUEsSUFDM0QsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsT0FBUyxTQUFVd0IsR0FBUTtBQUN6QixlQUFPMUIsRUFBSSxjQUFjO01BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDRSxFQUFHLFFBQVEsQ0FBQ0YsRUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJQSxFQUFJLElBQUksR0FBRyxDQUFDLEdBQUdFLEVBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNqRixHQUNJQyxLQUFrQixDQUFFO0FDcUJ4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLGFBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQW1WLENBQUE7QUFBQSxFQUVBLFVBQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBLE1BQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxpQkFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLFVBQUEsT0FBQSxHQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGVBQUEsQ0FBQTtBQUFBLE1BQ0EsWUFBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLFNBQUEsUUFBQSxTQUFBLFNBQUEsaUJBR0EsS0FBQSxTQUFBLGtCQUFBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxNQUFBLFVBQUE7QUFHQSxTQUFBLE1BQUEsVUFBQTtBQUFBLE1BQ0EsT0FBQSxDQUFBblosTUFBQTtBQUNBLFFBQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsTUFDQSxLQUFBLFNBQUEsY0FBQTtBQUFBLE1BRUE7QUFBQSxNQUVBLE9BQUEsQ0FBQUEsTUFBQTtBQUNBLFFBQUFBLEVBQUEsU0FBQSxVQUNBLEtBQUEsU0FBQSxjQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUNBLFFBQUE7QUFDQSxXQUFBLGFBQUEsSUFDQSxNQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsYUFBQSxJQUVBLE1BQUEsS0FBQSxNQUFBO0FBQUEsSUFFQSxTQUFBc1osR0FBQTtBQUNBLGNBQUEsTUFBQUEsQ0FBQTtBQUFBLElBQ0E7QUFDQSxTQUFBLGFBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQWpYLElBQUEs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QUEsZUFBQSxDQUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsWUFBQXJOLE1BQUEsS0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBQSxLQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBMkQsR0FBQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLE9BQUEsT0FBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUE7QUFDQSxhQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUEsR0FDQSxLQUFBLGtCQUFBLEdBRUEsS0FBQSxTQUFBLFVBQUEsS0FB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QSxHQUFBO0FBQUEsSUFDQSxtQkFBQSxFQUFBLE1BQUFoTixHQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGlCQUFBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUFtTCxHQUFBLEtBQUEsT0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxPQUFBLFVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsVUFBQSxLQUFBO0FBQ0EsZUFBQSxLQUFBO0FBQ0E7QUFHQSxjQUFBLEVBQUEsTUFBQXhRLE1BQUE4RCxFQUFBLElBQUEsS0FBQTtBQUNBLGVBQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFFQSxhQUFBLEtBQUEsYUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxLQUFBLFdBQUEsS0FBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE2RSxFQUFBLFdBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUE7QUFHQSxVQUFBLEVBQUEsTUFBQTNJLE1BQUEsS0FBQTtBQUNBLElBQUFBLE1BQ0EsS0FBQSxVQUFBWSxFQUFBWixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUFBLEVBRUE7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QTtBQUFBLElBQ0EsZUFBQTJFO0FBQUEsSUFDQSxlQUFBQztBQUFBLElBQ0EsTUFBQUM7QUFBQSxFQUNBO0FBQUEsRUFFQSxRQUFBLENBQUFoTixDQUFBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUEsVUFBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUEsQ0FBQWlOLE1BQUEsS0FBQSxZQUFBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsV0FBQTtBQUFBLFVBR0EsY0FBQSxNQUNBLEtBQUEsaUJBQUEsS0FBQSxDQUFBN2lCLE1BQUFBLEVBQUEsUUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLFFBQUEsQ0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FB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