ng-virtual-list 14.9.5 → 14.9.6

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.
@@ -884,6 +884,7 @@ export class NgVirtualListComponent extends DisposableComponent {
884
884
  bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,
885
885
  };
886
886
  if (snapScrollToBottom && !prepared) {
887
+ actualScrollSize = (totalSize > viewportSize ? totalSize - viewportSize : 0);
887
888
  const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });
888
889
  displayItems = calculatedDisplayItems;
889
890
  totalSize = calculatedTotalSize1;
@@ -1977,4 +1978,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1977
1978
  }], screenReaderMessage: [{
1978
1979
  type: Input
1979
1980
  }] } });
1980
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFxQixTQUFTLEVBQTRCLFlBQVksRUFBRSxLQUFLLEVBQ3pGLE1BQU0sRUFBZSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEdBQy9FLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQ2pHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FDbkQsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQ3JHLG1DQUFtQyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFDckksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBYyxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUNsSSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDM0gsNkJBQTZCLEVB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QU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDL0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixFQUNDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDakQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixFQUNELE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RCLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQ2pELFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6QyxFQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxFQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxFQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENB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b25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LFxyXG4gIE9uRGVzdHJveSwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLFxyXG4gIG9mLCByYWNlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9saXN0LWl0ZW0vbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSxcclxuICBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiwgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfQlVGRkVSX1NJWkUsIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX1NOQVAsIERFRkFVTFRfU05BUFBJTkdfTUVUSE9ELFxyXG4gIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBTQ1JPTExfRU5ELCBUT1BfUFJPUF9OQU1FLCBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUsIERFRkFVTFRfU0VMRUNUX01FVEhPRCwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEVDVElPTl9NT0RFLFxyXG4gIERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFLCBCRUhBVklPUl9TTU9PVEgsIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX0JPVFRPTSxcclxuICBNT1VTRV9ET1dOLCBNT1VTRV9VUCwgTU9VU0VfTEVBVkUsIE1PVVNFX09VVCwgVE9VQ0hfRU5ELCBUT1VDSF9MRUFWRSwgVE9VQ0hfT1VULCBUT1VDSF9TVEFSVCwgU0NST0xMRVJfV0hFRUwsXHJcbiAgU0NST0xMRVJfU0NST0xMQkFSX1NDUk9MTCwgREVGQVVMVF9MQU5HX1RFWFRfRElSLCBERUZBVUxUX1NDUk9MTEJBUl9USEVNRSwgREVGQVVMVF9DTElDS19ESVNUQU5DRSxcclxuICBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OLCBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVNjcm9sbEV2ZW50LCBJU2Nyb2xsT3B0aW9ucywgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCwgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50LCBJZCwgSVJlY3QsIElTaXplLCBTY3JvbGxCYXJUaGVtZSB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25Nb2RlLCBDb2xsZWN0aW9uTW9kZXMsIERpcmVjdGlvbiwgRGlyZWN0aW9ucywgRm9jdXNBbGlnbm1lbnRzLCBNZXRob2RGb3JTZWxlY3RpbmcsIE1ldGhvZHNGb3JTZWxlY3RpbmcsIFNuYXBwaW5nTWV0aG9kLCBTbmFwcGluZ01ldGhvZHMsXHJcbiAgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMsXHJcbn0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IFNjcm9sbEV2ZW50LCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgVHJhY2tCb3hFdmVudHMsIFRyYWNrQm94IH0gZnJvbSAnLi91dGlscy90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZCB9IGZyb20gJy4vdXRpbHMvc25hcHBpbmctbWV0aG9kJztcclxuaW1wb3J0IHsgRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFLCBJU19GSVJFRk9YLCB9IGZyb20gJy4vdXRpbHMvYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL21vZGVscy9iYXNlLXZpcnR1YWwtbGlzdC1pdGVtLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCQxIH0gZnJvbSAnLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgaXNEaXJlY3Rpb24gfSBmcm9tICcuL3V0aWxzL2lzLWRpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSAnLi91dGlscy9pcy1tZXRob2QtZm9yLXNlbGVjdGluZyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyBDTWFwIH0gZnJvbSAnLi91dGlscy9jbWFwJztcclxuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVCb29sZWFuLCB2YWxpZGF0ZUZsb2F0LCB2YWxpZGF0ZUludCwgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSAnLi91dGlscy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgY29weVZhbHVlQXNSZWFkb25seSwgb2JqZWN0QXNSZWFkb25seSB9IGZyb20gJy4vdXRpbHMvb2JqZWN0JztcclxuaW1wb3J0IHsgaXNDb2xsZWN0aW9uTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtY29sbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgSVNjcm9sbFRvUGFyYW1zLCBOZ1Njcm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgSVNjcm9sbFBhcmFtcyB7XHJcbiAgaWQ6IElkO1xyXG4gIGJlaGF2aW9yPzogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCI7XHJcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xyXG4gIGlzTGFzdEl0ZXJhdGlvbj86IGJvb2xlYW47XHJcbiAgc2Nyb2xsQ2FsbGVkPzogYm9vbGVhbjtcclxuICBzY3JvbGxlcj86IEhUTUxFbGVtZW50O1xyXG4gIGNiPzogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuY29uc3QgTUlOX1NDUk9MTF9UT19TVEFSVF9QSVhFTFMgPSAxMCxcclxuICBSQU5HRV9ESVNQTEFZX0lURU1TX0VORF9PRkZTRVQgPSAyMCxcclxuICBST0xFX0xJU1QgPSAnbGlzdCcsXHJcbiAgUk9MRV9MSVNUX0JPWCA9ICdsaXN0Ym94JyxcclxuICBJVEVNX0lEID0gJ2l0ZW0taWQnLFxyXG4gIElURU1fQ09OVEFJTkVSID0gJ25ndmwtaXRlbV9fY29udGFpbmVyJyxcclxuICBSRUFEWV9UT19TVEFSVCA9ICdyZWFkeS10by1zdGFydCcsXHJcbiAgV0FJVF9GT1JfUFJFUEFSQVRJT04gPSAnd2FpdC1mb3ItcHJlcGFyYXRpb24nO1xyXG5cclxuY29uc3QgdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24gPSAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSA8IDApID8gMCA6IHZhbHVlID4gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TID8gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TIDogdmFsdWVcclxufSxcclxuICB2YWxpZGF0ZUlkID0gKGlkOiBJZCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpZCBhcyBzdHJpbmcpIHx8IHZhbGlkYXRlRmxvYXQoaWQgYXMgbnVtYmVyKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBcImlkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSWRgLicpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvciA9IChiZWhhdmlvcjogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcoYmVoYXZpb3IgYXMgc3RyaW5nKSAmJiAoYmVoYXZpb3IgPT09ICdhdXRvJyB8fCBiZWhhdmlvciA9PT0gJ2luc3RhbnQnIHx8IGJlaGF2aW9yID09PSAnc21vb3RoJyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgXCJiZWhhdmlvclwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBhdXRvYCwgYGluc3RhbnRgIG9yIGBzbW9vdGhgLicpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgdmFsaWRhdGVJdGVyYXRpb24gPSAoaXRlcmF0aW9uOiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQoaXRlcmF0aW9uLCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBcIml0ZXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICB9XHJcbiAgfSxcclxuICB2YWxpZGF0ZUZvY3VzQWxpZ25tZW50ID0gKGFsaWduOiBGb2N1c0FsaWdubWVudCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhhbGlnbiBhcyBzdHJpbmcpICYmIChhbGlnbiA9PT0gJ25vbmUnIHx8IGFsaWduID09PSAnc3RhcnQnIHx8IGFsaWduID09PSAnY2VudGVyJyB8fCBhbGlnbiA9PT0gJ2VuZCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIFwiYWxpZ25cIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSBgbm9uZWAsIGBzdGFydGAsIGBjZW50ZXJgIG9yIGBlbmRgLicpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG5jb25zdCBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlID0gKGl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uLCBtZXNzYWdlUGF0dGVybjogc3RyaW5nIHwgdW5kZWZpbmVkLCBzY3JvbGxTaXplOiBudW1iZXIsXHJcbiAgaXNWZXJ0aWNhbDogYm9vbGVhbiwgYm91bmRzOiBJUmVjdCkgPT4ge1xyXG4gIGlmICghbWVzc2FnZVBhdHRlcm4pIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgY29uc3QgbGlzdCA9IGl0ZW1zID8/IFtdLCBzaXplID0gaXNWZXJ0aWNhbCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XHJcbiAgbGV0IHN0YXJ0ID0gTnVtYmVyLk5hTiwgZW5kID0gTnVtYmVyLk5hTiwgcHJldkl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQ7XHJcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgY29uc3QgaXRlbSA9IGxpc3RbaV0sIHBvc2l0aW9uID0gaXNWZXJ0aWNhbCA/IGl0ZW0ubWVhc3VyZXMueSA6IGl0ZW0ubWVhc3VyZXMueCxcclxuICAgICAgaXRlbVNpemUgPSBpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy5oZWlnaHQgOiBpdGVtLm1lYXN1cmVzLndpZHRoO1xyXG4gICAgaWYgKCgocG9zaXRpb24gKyBpdGVtU2l6ZSkgPj0gc2Nyb2xsU2l6ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXJ0KSkge1xyXG4gICAgICBzdGFydCA9IGl0ZW0uaW5kZXggKyAxO1xyXG4gICAgfVxyXG4gICAgaWYgKChwb3NpdGlvbiA+PSAoc2Nyb2xsU2l6ZSArIHNpemUpKSAmJiBOdW1iZXIuaXNOYU4oZW5kKSAmJiBwcmV2SXRlbSkge1xyXG4gICAgICBlbmQgPSBwcmV2SXRlbS5pbmRleCArIDE7XHJcbiAgICB9XHJcbiAgICBwcmV2SXRlbSA9IGl0ZW07XHJcbiAgfVxyXG4gIGlmIChOdW1iZXIuaXNOYU4oc3RhcnQpIHx8IE51bWJlci5pc05hTihlbmQpKSB7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIGxldCBmb3JtYXR0ZWQgPSBtZXNzYWdlUGF0dGVybiA/PyAnJztcclxuICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgnJDEnLCBgJHtzdGFydH1gKTtcclxuICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgnJDInLCBgJHtlbmR9YCk7XHJcbiAgcmV0dXJuIGZvcm1hdHRlZDtcclxufTtcclxuXHJcbmNvbnN0IGZvcm1hdEFjdHVhbERpc3BsYXlJdGVtcyA9IChpdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kT2Zmc2V0OiBudW1iZXIsIHNjcm9sbFNpemU6IG51bWJlcixcclxuICBpc1ZlcnRpY2FsOiBib29sZWFuLCBib3VuZHM6IElTaXplKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgY29uc3QgbGlzdCA9IGl0ZW1zID8/IFtdLCBzaXplID0gaXNWZXJ0aWNhbCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XHJcbiAgbGV0IHN0YXJ0ID0gTnVtYmVyLk5hTiwgZW5kID0gTnVtYmVyLk5hTjtcclxuICBmb3IgKGxldCBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICBjb25zdCBpdGVtID0gbGlzdFtpXSwgcG9zaXRpb24gPSBpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy55IDogaXRlbS5tZWFzdXJlcy54LFxyXG4gICAgICBpdGVtU2l6ZSA9IGlzVmVydGljYWwgPyBpdGVtLm1lYXN1cmVzLmhlaWdodCA6IGl0ZW0ubWVhc3VyZXMud2lkdGg7XHJcbiAgICBpZiAoKHBvc2l0aW9uICsgaXRlbVNpemUgPD0gc2Nyb2xsU2l6ZSArIHN0YXJ0T2Zmc2V0KSkge1xyXG4gICAgICBzdGFydCA9IGl0ZW0uaW5kZXg7XHJcbiAgICB9XHJcbiAgICBpZiAoKChwb3NpdGlvbikgPD0gKHNjcm9sbFNpemUgKyBzaXplIC0gZW5kT2Zmc2V0ICsgUkFOR0VfRElTUExBWV9JVEVNU19FTkRfT0ZGU0VUKSkpIHtcclxuICAgICAgZW5kID0gaXRlbS5pbmRleDtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKE51bWJlci5pc05hTihzdGFydCkgfHwgTnVtYmVyLmlzTmFOKGVuZCkpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHJldHVybiBbc3RhcnQsIGVuZF07XHJcbn07XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdzdHlsZSc6ICdwb3NpdGlvbjogcmVsYXRpdmU7J1xyXG4gIH0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG4gIHByb3ZpZGVyczogW05nVmlydHVhbExpc3RTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RDb21wb25lbnQgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyZXJzQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfbGlzdENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsZXInLCB7IHJlYWQ6IE5nU2Nyb2xsZXJDb21wb25lbnQgfSlcclxuICBwcml2YXRlIF9zY3JvbGxlckNvbXBvbmVudDogTmdTY3JvbGxlckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkbGlzdCA9IHRoaXMuXyRsaXN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgdmlld3BvcnQgc2l6ZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uVmlld3BvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTaXplPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGVsZW1lbnRzIGFyZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gZWxlbWVudHMgYXJlIGNvbGxhcHNlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBzdGFydC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxSZWFjaEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRoZW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxCYXJUaGVtZSB8IHVuZGVmaW5lZD4oREVGQVVMVF9TQ1JPTExCQVJfVEhFTUUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJUaGVtZSA9IHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGhlbWVUcmFuc2Zvcm0gPSAodjogU2Nyb2xsQmFyVGhlbWUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaGVtZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9USEVNRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGJhciB0aGVtZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGVtZSh2OiBTY3JvbGxCYXJUaGVtZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGhlbWVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoZW1lLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRoZW1lKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRoZW1lLmdldFZhbHVlKCkgYXMgU2Nyb2xsQmFyVGhlbWU7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhck1pblNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhck1pblNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyTWluU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1pbmltdW0gc2Nyb2xsYmFyIHNpemUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyTWluU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyTWluU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJNaW5TaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKSBhcyBudW1iZXI7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsb2FkaW5nXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHNjcm9sbEJhciBnb2VzIGludG8gbG9hZGluZyBzdGF0ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbG9hZGluZ1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbG9hZGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyR3YWl0Rm9yUHJlcGFyYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT04pO1xyXG4gIHJlYWRvbmx5ICR3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF93YWl0Rm9yUHJlcGFyYXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIndhaXRGb3JQcmVwYXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0IHdpbGwgd2FpdCB1bnRpbCB0aGUgbGlzdCBpdGVtcyBhcmUgZnVsbHkgcHJlcGFyZWQgYmVmb3JlIGRpc3BsYXlpbmcgdGhlbS4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB3YWl0Rm9yUHJlcGFyYXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3dhaXRGb3JQcmVwYXJhdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHdhaXRGb3JQcmVwYXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UpO1xyXG4gIHJlYWRvbmx5ICRjbGlja0Rpc3RhbmNlID0gdGhpcy5fJGNsaWNrRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY2xpY2tEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gc2Nyb2xsIGRpc3RhbmNlIGF0IHdoaWNoIGEgY2xpY2sgZXZlbnQgaXMgdHJpZ2dlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsaWNrRGlzdGFuY2UodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCkgYXMgbnVtYmVyOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQpO1xyXG4gIHJlYWRvbmx5ICRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VUO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgb2Zmc2V0IHZhbHVlOyBpZiB0aGUgc2Nyb2xsIGFyZWEgdmFsdWUgaXMgZXhjZWVkZWQsIHRoZSBzY3JvbGwgYW5pbWF0aW9uIHdpbGwgYmUgZGlzYWJsZWQuIERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsU3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxTdGFydE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIHN0YXJ0IG9mZnNldCB2YWx1ZTsgRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxTdGFydE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxTdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEVuZE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxFbmRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNjcm9sbCBlbmQgb2Zmc2V0IHZhbHVlOyBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEVuZE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxFbmRPZmZzZXRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBTY3JvbGxUb0JvdHRvbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1NDUk9MTFRPX0JPVFRPTSk7XHJcbiAgcmVhZG9ubHkgJHNuYXBTY3JvbGxUb0JvdHRvbSA9IHRoaXMuXyRzbmFwU2Nyb2xsVG9Cb3R0b20uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBTY3JvbGxUb0JvdHRvbVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBTY3JvbGxUb0JvdHRvbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1NDUk9MTFRPX0JPVFRPTTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsIHdpbGwgYmUgYW5jaG9yZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhdCBzdGFydHVwLi4gRGVmYXVsdCB2YWx1ZSBpcyBcImZhbHNlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvQm90dG9tKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvQm90dG9tLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9Cb3R0b21UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBTY3JvbGxUb0JvdHRvbS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwU2Nyb2xsVG9Cb3R0b20oKSB7IHJldHVybiB0aGlzLl8kc25hcFNjcm9sbFRvQm90dG9tLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihERUZBVUxUX0xBTkdfVEVYVF9ESVIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXJUcmFuc2Zvcm0gPSAodjogVGV4dERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImxhbmdUZXh0RGlyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfTEFOR19URVhUX0RJUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGRpcmVjdGlvbiBvZiB0ZXh0IGZvciB0aGUgbG9jYWxlLlxyXG4gICAqIENhbiBiZSBlaXRoZXIgXCJsdHJcIiAobGVmdC10by1yaWdodCkgb3IgXCJydGxcIiAocmlnaHQtdG8tbGVmdCkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbGFuZ1RleHREaXIodjogVGV4dERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbGFuZ1RleHREaXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRlZmF1bHRJdGVtVmFsdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkZGVmYXVsdEl0ZW1WYWx1ZSA9IHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWZhdWx0SXRlbVZhbHVlKHY6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZGVmYXVsdEl0ZW1WYWx1ZSgpIHsgcmV0dXJuIHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtcyA9IHRoaXMuXyRpdGVtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2LCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldLCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdChpdGVtLCB0cnVlKTtcclxuICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAmJiAhKHZhbGlkYXRlRmxvYXQoaXRlbVt0cmFja0J5XSBhcyBudW1iZXIsIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKGl0ZW1bdHJhY2tCeV0gYXMgc3RyaW5nLCB0cnVlKSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYElWaXJ0dWFsTGlzdENvbGxlY3Rpb25gIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgYXMgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJZHNUcmFuc2Zvcm0gPSAodjogQXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiBhcyBhbnksIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKHYgYXMgYW55LCB0cnVlKSB8fCB2YWxpZGF0ZUZsb2F0KHYgYXMgYW55LCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodiAmJiBBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKGl0ZW0gYXMgYW55KSB8fCB2YWxpZGF0ZUZsb2F0KGl0ZW0gYXMgYW55KTtcclxuICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RlZElkc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEFycmF5PElkPiB8IElkYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPyBbXSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGVkSWRzKHY6IEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RlZElkc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICByZWFkb25seSAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VkSWRzVHJhbnNmb3JtID0gKHY6IEFycmF5PElkPikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2IGFzIGFueSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYgJiYgQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpdGVtIGFzIGFueSkgfHwgdmFsaWRhdGVGbG9hdChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VkSWRzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgQXJyYXk8SWQ+YCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sbGFwc2VkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlZElkcyh2OiBBcnJheTxJZD4pIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzZWRJZHNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdEJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLKTtcclxuICByZWFkb25seSAkc2VsZWN0QnlDbGljayA9IHRoaXMuXyRzZWxlY3RCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0QnlDbGlja1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnLnNlbGVjdCBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdEJ5Q2xpY2soKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0QnlDbGljay5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZUJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0spO1xyXG4gIHJlYWRvbmx5ICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZUJ5Q2xpY2tUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZUJ5Q2xpY2tcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIGNvbmZpZy5jb2xsYXBzZSBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzZUJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxhcHNlQnlDbGlja1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxhcHNlQnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQKTtcclxuICByZWFkb25seSAkc25hcCA9IHRoaXMuXyRzbmFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04pO1xyXG4gIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGVyaW1lbnRhbCFcclxuICAgKiBFbmFibGVzIGJ1ZmZlciBvcHRpbWl6YXRpb24uXHJcbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBpZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiBhcmUgbm90IGFkZGVkIG9yIHVwZGF0ZWQuIE90aGVyd2lzZSwgYXJ0aWZhY3RzIGluIHRoZSBmb3JtIG9mIHR3aXRjaGluZyBvZiB0aGUgc2Nyb2xsIGFyZWEgYXJlIHBvc3NpYmxlLlxyXG4gICAqIFdvcmtzIG9ubHkgaWYgdGhlIHByb3BlcnR5IGR5bmFtaWMgPSB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1SZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVJlbmRlcmVyVHJhbnNmb3JtID0gKHY6IFRlbXBsYXRlUmVmPGFueT4pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG4gICAgaWYgKHYgJiYgISh0eXBlb2Ygdi5lbGVtZW50UmVmID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygdi5jcmVhdGVFbWJlZGRlZFZpZXcgPT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIFwiaXRlbVJlbmRlcmVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgVGVtcGxhdGVSZWZgLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJHJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1SZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1SZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSBhcyBUZW1wbGF0ZVJlZjxhbnk+OyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtQ29uZmlnTWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwPih7fSk7XHJcbiAgcmVhZG9ubHkgJGl0ZW1Db25maWdNYXAgPSB0aGlzLl8kaXRlbUNvbmZpZ01hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbmZpZ01hcFRyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGlkIGluIHYpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2lkXTtcclxuICAgICAgICAgIGlmICghaXRlbSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uY29sbGFwc2FibGUsIHRydWUpIHx8XHJcbiAgICAgICAgICAgICF2YWxpZGF0ZUJvb2xlYW4oaXRlbS5zZWxlY3RhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhKGl0ZW0uc3RpY2t5ID09PSB1bmRlZmluZWQgfHwgaXRlbS5zdGlja3kgPT09IDAgfHwgaXRlbS5zdGlja3kgPT09IDEgfHwgaXRlbS5zdGlja3kgPT09IDIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1Db25maWdNYXBcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwYC4nKTtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBgc3RpY2t5YCBwb3NpdGlvbiwgYGNvbGxhcHNhYmxlYCBhbmQgYHNlbGVjdGFibGVgIGZvciB0aGUgbGlzdCBpdGVtIGVsZW1lbnQuIElmIGBzdGlja3lgIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gYHN0aWNreWAgcG9zaXRpb24gaXMgYXBwbGllZC4gXHJcbiAgICogSWYgdGhlIGBzdGlja3lgIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gdGhlIGBzdGlja3lgIHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIGBzZWxlY3RhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgb3Igbm90LiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKiBgY29sbGFwc2FibGVgIGRldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IHdpdGggYSBgc3RpY2t5YCBwcm9wZXJ0eSBncmVhdGVyIHRoYW4gemVybyBjYW4gY29sbGFwc2UgYW5kIGNvbGxhcHNlIGVsZW1lbnRzIGluIGZyb250IHRoYXQgZG8gbm90IGhhdmUgYSBgc3RpY2t5YCBwcm9wZXJ0eS5cclxuICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL21vZGVscy9pdGVtLWNvbmZpZy1tYXAubW9kZWwudHNcclxuICAgKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtQ29uZmlnTWFwKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbUNvbmZpZ01hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbUNvbmZpZ01hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtQ29uZmlnTWFwKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbCA9IE51bWJlcih2KTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsKSB8fCB2YWwgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZ25vcmVkIGlmIHRoZSBkeW5hbWljU2l6ZSBwcm9wZXJ0eSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1TaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9keW5hbWljU2l6ZVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZHluYW1pY1NpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRFlOQU1JQ19TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLlxyXG4gICAqIElmIGZhbHNlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYSBmaXhlZCBzaXplIHNwZWNpZmllZCBieSB0aGUgaXRlbVNpemUgcHJvcGVydHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGR5bmFtaWNTaXplKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2R5bmFtaWNTaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkeW5hbWljU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHJlYWRvbmx5ICRkaXJlY3Rpb24gPSB0aGlzLl8kZGlyZWN0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9kaXJlY3Rpb25UcmFuc2Zvcm0gPSAodjogRGlyZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnaG9yaXpvbnRhbCcgfHwgdiA9PT0gJ3ZlcnRpY2FsJyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImRpcmVjdGlvblwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9ESVJFQ1RJT047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2RpcmVjdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZGlyZWN0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGVjdGlvbk1vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbGxlY3Rpb25Nb2RlPihERUZBVUxUX0NPTExFQ1RJT05fTU9ERSk7XHJcbiAgcmVhZG9ubHkgJGNvbGxlY3Rpb25Nb2RlID0gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsZWN0aW9uTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vcm1hbCcgfHwgdiA9PT0gJ2xhenknKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZGlyZWN0aW9uXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgYG5vcm1hbGAgb3IgYGxhenlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMRUNUSU9OX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gbW9kZXMgZm9yIGNvbGxlY3Rpb24gZWxlbWVudHMuIERlZmF1bHQgdmFsdWUgaXMgXCJub3JtYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsZWN0aW9uTW9kZSh2OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxlY3Rpb25Nb2RlKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGJ1ZmZlclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9CVUZGRVJfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhCdWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFKTtcclxuICByZWFkb25seSAkbWF4QnVmZmVyU2l6ZSA9IHRoaXMuXyRtYXhCdWZmZXJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tYXhCdWZmZXJTaXplVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IHZhbCA9IHY7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYsIHRydWUpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhCdWZmZXJTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgdmFsID0gREVGQVVMVF9NQVhfQlVGRkVSX1NJWkU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IHRoaXMuXyRidWZmZXJTaXplLmdldFZhbHVlKCk7XHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsIDw9IGJ1ZmZlclNpemUpIHtcclxuICAgICAgcmV0dXJuIGJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHJlYWRvbmx5ICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcHBpbmdNZXRob2RUcmFuc2Zvcm0gPSAodjogU25hcHBpbmdNZXRob2QpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub3JtYWwnIHx8IHYgPT09ICdhZHZhbmNlZCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwcGluZ01ldGhvZFwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBub3JtYWxgIG9yIGBhZHZhbmNlZGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBQSU5HX01FVEhPRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKiAnZGVmYXVsdCcgLSBOb3JtYWwgZ3JvdXAgcmVuZGVyaW5nLlxyXG4gICAqICdhZHZhbmNlZCcgLSBUaGUgZ3JvdXAgaXMgcmVuZGVyZWQgb24gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiBMaXN0IGl0ZW1zIGJlbG93IHRoZSBncm91cCBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwcGluZ01ldGhvZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcHBpbmdNZXRob2QubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwcGluZ01ldGhvZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtZXRob2RGb3JTZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGhvZEZvclNlbGVjdGluZz4oREVGQVVMVF9TRUxFQ1RfTUVUSE9EKTtcclxuICByZWFkb25seSAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWV0aG9kRm9yU2VsZWN0aW5nVHJhbnNmb3JtID0gKHY6IE1ldGhvZEZvclNlbGVjdGluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vbmUnIHx8IHYgPT09ICdzZWxlY3QnIHx8ICdtdWx0aS1zZWxlY3QnKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWV0aG9kRm9yU2VsZWN0aW5nXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgYG5vbmVgLCBgc2VsZWN0YCBvciBgbXVsdGktc2VsZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUX01FVEhPRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqICBNZXRob2QgZm9yIHNlbGVjdGluZyBsaXN0IGl0ZW1zLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1ldGhvZEZvclNlbGVjdGluZyh2OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kbWV0aG9kRm9yU2VsZWN0aW5nLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tZXRob2RGb3JTZWxlY3RpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1ldGhvZEZvclNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kdHJhY2tCeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihUUkFDS19CWV9QUk9QRVJUWV9OQU1FKTtcclxuICByZWFkb25seSAkdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF90cmFja0J5VHJhbnNmb3JtID0gKHY6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwidHJhY2tCeVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBUUkFDS19CWV9QUk9QRVJUWV9OQU1FO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3RyYWNrQnlUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcmVhZG9ubHkgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSA9ICh2OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcmVlblJlYWRlck1lc3NhZ2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdlIGZvciBzY3JlZW4gcmVhZGVyLlxyXG4gICAqIFRoZSBtZXNzYWdlIGZvcm1hdCBpczogXCJzb21lIHRleHQgJDEgc29tZSB0ZXh0ICQyXCIsXHJcbiAgICogd2hlcmUgJDEgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24sXHJcbiAgICogJDIgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzY3JlZW4gY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JlZW5SZWFkZXJNZXNzYWdlKHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JlZW5SZWFkZXJNZXNzYWdlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UpO1xyXG4gIHJlYWRvbmx5ICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzVmVydGljYWwgPSB0aGlzLmdldElzVmVydGljYWwoKTtcclxuXHJcbiAgZ2V0IG9yaWVudGF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWwgPyBEaXJlY3Rpb25zLlZFUlRJQ0FMIDogRGlyZWN0aW9ucy5IT1JJWk9OVEFMO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRFbGVtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkZm9jdXNlZEVsZW1lbnQgPSB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGNsYXNzZXMgPSB0aGlzLl8kY2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuICBnZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCkgeyByZXR1cm4gdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOyB9XHJcblxyXG4gIGdldCBkaXNwbGF5SXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc05vdFNlbGVjdGluZyA9IHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNOb3RTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc05vdFNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNTaW5nbGVTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc011bHRpU2VsZWN0aW5nID0gdGhpcy5nZXRJc011bHRpU2VsZWN0aW5nKCk7XHJcbiAgZ2V0IGlzTXVsdGlTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0aW5nOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSXRlbUlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlY3QgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRvdGFsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3RCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZWN0IHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxTdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbEZpbmlzaGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9saXN0UmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCksIHNjcm9sbGVyID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCksIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSwgc25hcHBlZENvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ/Lmluc3RhbmNlO1xyXG4gICAgaWYgKGxpc3QgJiYgc2Nyb2xsZXIgJiYgc25hcHBlZENvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHsgd2lkdGg6IGxXaWR0aCwgaGVpZ2h0OiBsSGVpZ2h0IH0gPSBsaXN0RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCA6IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPiAwO1xyXG5cclxuICAgICAgbGV0IHNjcm9sbEJhclNpemUgPSBpc1ZlcnRpY2FsID8gd2lkdGggLSBsV2lkdGggOiBoZWlnaHQgLSBsSGVpZ2h0LCBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlLCBvdmVybGFwU2Nyb2xsQmFyU2l6ZSA9IDA7XHJcbiAgICAgIGlmIChzY3JvbGxCYXJTaXplID09PSAwICYmIGlzU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uuc2Nyb2xsQmFyU2l6ZSA9IHNjcm9sbEJhclNpemU7XHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uub3ZlcmxhcFNjcm9sbEJhclNpemUgPSBvdmVybGFwU2Nyb2xsQmFyU2l6ZTtcclxuXHJcbiAgICAgIGNvbnN0IGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxCYXJPdmVybGFwICYmIElTX0ZJUkVGT1gpIHtcclxuICAgICAgICBzY3JvbGxCYXJTaXplID0gb3ZlcmxhcFNjcm9sbEJhclNpemUgPSBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNuYXBwaW5nTWV0aG9kID0gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7XHJcbiAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLk5PUk1BTCB8fCBzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgaWYgKGxhbmdUZXh0RGlyID09PSBUZXh0RGlyZWN0aW9ucy5SVEwpIHtcclxuICAgICAgICAgIHNuYXBwZWRDb21wb25lbnQuZWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAke292ZXJsYXBTY3JvbGxCYXJTaXplfSAwIEwgJHtvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9ICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aCAtIG92ZXJsYXBTY3JvbGxCYXJTaXplfSAwIFpcIilgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LnJlZ3VsYXJMZW5ndGggPSBgJHtpc1ZlcnRpY2FsID8gbGlzdEJvdW5kcy53aWR0aCA6IGxpc3RCb3VuZHMuaGVpZ2h0fSR7UFh9YDtcclxuICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgc2Nyb2xsZXJFbGVtZW50ID0gc2Nyb2xsZXIubmF0aXZlRWxlbWVudCwgZGVsdGEgPSBzbmFwcGVkQ29tcG9uZW50Lml0ZW0/Lm1lYXN1cmVzLmRlbHRhID8/IDA7XHJcblxyXG4gICAgICBsZXQgbGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXI7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgbGVmdCA9IDA7XHJcbiAgICAgICAgcmlnaHQgPSB3aWR0aCAtIHNjcm9sbEJhclNpemU7XHJcbiAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQ7XHJcbiAgICAgICAgaWYgKHNuYXBwaW5nTWV0aG9kID09PSBTbmFwcGluZ01ldGhvZHMuTk9STUFMIHx8IHNuYXBwaW5nTWV0aG9kID09PSBTbmFwcGluZ01ldGhvZHMuQURWQU5DRUQpIHtcclxuICAgICAgICAgIGlmIChsYW5nVGV4dERpciA9PT0gVGV4dERpcmVjdGlvbnMuUlRMKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwICR7dG9wICsgZGVsdGF9IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIEwgJHtyaWdodH0gMCBMICR7cmlnaHR9ICR7dG9wICsgZGVsdGF9IFpcIilgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZWZ0ID0gc1dpZHRoO1xyXG4gICAgICAgIHJpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgdG9wID0gMDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQgLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLk5PUk1BTCB8fCBzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gJHtsZWZ0ICsgZGVsdGF9IDAgTCAke2xlZnQgKyBkZWx0YX0gJHtib3R0b219IEwgMCAke2JvdHRvbX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcygpO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBpZiAoYm91bmRzKSB7XHJcbiAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh7IHg6IGJvdW5kcy54LCB5OiBib3VuZHMueSwgd2lkdGg6IGJvdW5kcy53aWR0aCwgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fJGJvdW5kcy5uZXh0KHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVSZWd1bGFyUmVuZGVyZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uTGlzdFJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmIChib3VuZHMpIHtcclxuICAgICAgdGhpcy5fJGxpc3RCb3VuZHMubmV4dCh7IHg6IGJvdW5kcy54LCB5OiBib3VuZHMueSwgd2lkdGg6IGJvdW5kcy53aWR0aCwgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fJGxpc3RCb3VuZHMubmV4dCh7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbVRvRm9jdXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHBvc2l0aW9uOiBudW1iZXIsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5DRU5URVIpID0+IHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkhLCB7IHdpZHRoOiBlbGVtZW50V2lkdGgsIGhlaWdodDogZWxlbWVudEhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcclxuICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbDtcclxuICAgICAgbGV0IHBvczogbnVtYmVyID0gTnVtYmVyLk5hTjtcclxuICAgICAgc3dpdGNoIChhbGlnbikge1xyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLlNUQVJUOiB7XHJcbiAgICAgICAgICBwb3MgPSBpc1ZlcnRpY2FsID8gcG9zaXRpb24gOiBwb3NpdGlvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIEZvY3VzQWxpZ25tZW50cy5DRU5URVI6IHtcclxuICAgICAgICAgIHBvcyA9IGlzVmVydGljYWwgPyBwb3NpdGlvbiAtIChoZWlnaHQgLSBlbGVtZW50SGVpZ2h0KSAqIC41IDogcG9zaXRpb24gLSAod2lkdGggLSBlbGVtZW50V2lkdGgpICogLjU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuRU5EOiB7XHJcbiAgICAgICAgICBwb3MgPSBpc1ZlcnRpY2FsID8gcG9zaXRpb24gLSAoaGVpZ2h0IC0gZWxlbWVudEhlaWdodCkgOiBwb3NpdGlvbiAtICh3aWR0aCAtIGVsZW1lbnRXaWR0aCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocG9zKSkge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gc2Nyb2xsZXI/LnNjcm9sbFdpZHRoID8/IDAsIHNjcm9sbEhlaWdodCA9IHNjcm9sbGVyPy5zY3JvbGxIZWlnaHQgPz8gMDtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgaWYgKHBvcyA8IDApIHtcclxuICAgICAgICAgICAgcG9zID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwb3MgPiBzY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgICAgcG9zID0gc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocG9zIDwgMCkge1xyXG4gICAgICAgICAgICBwb3MgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvcyA+IHNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHBvcyA9IHNjcm9sbFdpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCh0cnVlKTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHsgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBwb3MsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yIH07XHJcbiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkdmlld0luaXRpYWxpemVkID0gdGhpcy5fJHZpZXdJbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgY2xhc3MgdHJhY2tCb3hcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveENsYXNzOiBDb21wb25lbnQkMTxUcmFja0JveD4gPSBUcmFja0JveDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSBvZiBlbGVtZW50IHNpemVzIGJ5IHRoZWlyIGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3g6IFRyYWNrQm94ID0gbmV3IHRoaXMuX3RyYWNrQm94Q2xhc3ModGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSk7XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNhY2hlVmVyc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XHJcbiAgZ2V0ICRjYWNoZVZlcnNpb24oKSB7IHJldHVybiB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRwcmVwYXJlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRwcmVwYXJlZCA9IHRoaXMuXyRwcmVwYXJlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGlzUmVzZXRlZFJlYWNoU3RhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHJlYWRvbmx5ICRpc1Jlc2V0ZWRSZWFjaFN0YXJ0ID0gdGhpcy5fJGlzUmVzZXRlZFJlYWNoU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbCA9IG5ldyBTdWJqZWN0PElTY3JvbGxFdmVudD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVzZXJTY3JvbGwgPSBuZXcgU3ViamVjdDxJU2Nyb2xsRXZlbnQ+KCk7XHJcbiAgcmVhZG9ubHkgJHVzZXJTY3JvbGwgPSB0aGlzLl8kdXNlclNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveFJlc2V0SGFuZGxlciA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBpZiAodiAmJiB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICB0aGlzLl8kaXNSZXNldGVkUmVhY2hTdGFydC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBTY3JvbGxPcHRpb25zID0ge1xyXG4gICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiAwLFxyXG4gICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uUHJlcGFyZWRIYW5kbGVyID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuXyRwcmVwYXJlZC5uZXh0KHYpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogTmdWaXJ0dWFsTGlzdFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlJFU0VULCB0aGlzLl9vblRyYWNrQm94UmVzZXRIYW5kbGVyKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuUFJFUEFSRSwgdGhpcy5fb25QcmVwYXJlZEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLl90cmFja0JveCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLml0ZW1Ub0ZvY3VzID0gdGhpcy5pdGVtVG9Gb2N1cztcclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5kaXNwbGF5Q29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIHRoaXMuJHZpZXdJbml0aWFsaXplZC5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxlci5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxWaWV3cG9ydCk7XHJcbiAgICAgICAgdGhpcy5fJGxpc3QubmV4dCh0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsQ29udGVudCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGFuZ1RleHREaXIgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNsaWNrRGlzdGFuY2UgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IHByZXBhcmVkID0gZmFsc2UsIHJlYWR5VG9TdGFydCA9IGZhbHNlLCBpc1VzZXJTY3JvbGxpbmcgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLiRwcmVwYXJlZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICghdikge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZUNsZWFuKCk7XHJcbiAgICAgICAgICByZWFkeVRvU3RhcnQgPSBpc1VzZXJTY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHByZXBhcmVkID0gcmVhZHlUb1N0YXJ0ID0gdjtcclxuICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdiwgW1dBSVRfRk9SX1BSRVBBUkFUSU9OXTogd2FpdEZvclByZXBhcmF0aW9uIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSwgW1JFQURZX1RPX1NUQVJUXTogdHJ1ZSwgW1dBSVRfRk9SX1BSRVBBUkFUSU9OXTogd2FpdEZvclByZXBhcmF0aW9uIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUltbWVkaWF0ZWx5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgZGVsYXkoMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgcHJlcGFyZWQgPSB2O1xyXG4gICAgICAgIHRoaXMudXBkYXRlSW1tZWRpYXRlbHkoKTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlbGF5KDApLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCwgdmFsID0gdiB8fCAhd2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdmFsLCBbV0FJVF9GT1JfUFJFUEFSQVRJT05dOiB3YWl0Rm9yUHJlcGFyYXRpb24gfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbW1lZGlhdGVseSgpO1xyXG4gICAgICB9KSxcclxuICAgICAgZGVsYXkoMTAwMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIHJlYWR5VG9TdGFydCA9IHY7XHJcbiAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlLCBbUkVBRFlfVE9fU1RBUlRdOiB0cnVlLCBbV0FJVF9GT1JfUFJFUEFSQVRJT05dOiB3YWl0Rm9yUHJlcGFyYXRpb24gfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbW1lZGlhdGVseSgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kZm9jdXNlZElkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGZvY3VzZWRFbGVtZW50Lm5leHQodiA/PyB1bmRlZmluZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKGxpc3QgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50ID8/IG51bGw7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkZGVmYXVsdEl0ZW1WYWx1ZSA9IHRoaXMuJGRlZmF1bHRJdGVtVmFsdWUsXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvQm90dG9tID0gdGhpcy4kc25hcFNjcm9sbFRvQm90dG9tLFxyXG4gICAgICAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnksXHJcbiAgICAgICRzZWxlY3RCeUNsaWNrID0gdGhpcy4kc2VsZWN0QnlDbGljayxcclxuICAgICAgJGNvbGxhcHNlQnlDbGljayA9IHRoaXMuJGNvbGxhcHNlQnlDbGljayxcclxuICAgICAgJGlzU2Nyb2xsU3RhcnQgPSB0aGlzLl8kaXNTY3JvbGxTdGFydC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJGlzU2Nyb2xsRmluaXNoZWQgPSB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy4kc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRzY3JvbGxFbmRPZmZzZXQsXHJcbiAgICAgICRpc1ZlcnRpY2FsID0gdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1ZlcnRpY2FsKHYgfHwgREVGQVVMVF9ESVJFQ1RJT04pKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuaXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZHluYW1pY1NpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmR5bmFtaWMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGRlZmF1bHRJdGVtVmFsdWUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmRlZmF1bHRJdGVtVmFsdWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFN0YXJ0T2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl9zZXJ2aWNlLnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl9zZXJ2aWNlLnNjcm9sbEVuZE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNSZXNldGVkUmVhY2hTdGFydCA9IHRoaXMuXyRpc1Jlc2V0ZWRSZWFjaFN0YXJ0LmdldFZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy4kaXNSZXNldGVkUmVhY2hTdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICBpc1Jlc2V0ZWRSZWFjaFN0YXJ0ID0gdjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMSksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaXNSZXNldGVkUmVhY2hTdGFydCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNTY3JvbGxTdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkeVRvU3RhcnQgJiYgdiAmJiAhaXNSZXNldGVkUmVhY2hTdGFydCAmJiB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hTdGFydC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuXyRpc1Jlc2V0ZWRSZWFjaFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsRmluaXNoZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHY7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaEVuZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdEJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2sgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlQnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksXHJcbiAgICAgICRsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgICApLFxyXG4gICAgICAkaXRlbXMgPSB0aGlzLiRpdGVtcy5waXBlKFxyXG4gICAgICAgIG1hcChpID0+ICFpID8gW10gOiBpKSxcclxuICAgICAgKSwgJHNjcm9sbFNpemUgPSB0aGlzLl8kc2Nyb2xsU2l6ZS5hc09ic2VydmFibGUoKSxcclxuICAgICAgJGl0ZW1TaXplID0gdGhpcy4kaXRlbVNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkYnVmZmVyU2l6ZSA9IHRoaXMuJGJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0aGlzLiRtYXhCdWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtQ29uZmlnTWFwID0gdGhpcy4kaXRlbUNvbmZpZ01hcC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+ICF2ID8ge30gOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJHNuYXAgPSB0aGlzLiRzbmFwLFxyXG4gICAgICAkaXNMYXp5ID0gdGhpcy4kY29sbGVjdGlvbk1vZGUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzTGF6eSh2IHx8IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKSksXHJcbiAgICAgICksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRtZXRob2RGb3JTZWxlY3RpbmcgPSB0aGlzLiRtZXRob2RGb3JTZWxlY3RpbmcsXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRoaXMuJHNlbGVjdGVkSWRzLFxyXG4gICAgICAkY29sbGFwc2VkSWRzID0gdGhpcy4kY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzZWRJdGVtSWRzID0gdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBtYXAodiA9PiBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdKSxcclxuICAgICAgKSxcclxuICAgICAgJGFjdHVhbEl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkc2NyZWVuUmVhZGVyTWVzc2FnZSA9IHRoaXMuJHNjcmVlblJlYWRlck1lc3NhZ2UsXHJcbiAgICAgICRkaXNwbGF5SXRlbXMgPSB0aGlzLl9zZXJ2aWNlLiRkaXNwbGF5SXRlbXMsXHJcbiAgICAgICRjYWNoZVZlcnNpb24gPSB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRkaXNwbGF5SXRlbXMsICRzY3JlZW5SZWFkZXJNZXNzYWdlLCAkaXNWZXJ0aWNhbCwgJHNjcm9sbFNpemUsICRib3VuZHNdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgaXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSwgYm91bmRzXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlLm5leHQoXHJcbiAgICAgICAgICBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlKGl0ZW1zLCBzY3JlZW5SZWFkZXJNZXNzYWdlLCBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMhKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNMYXp5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNMYXp5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtcywgJGl0ZW1TaXplXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIG1hcCgoW2l0ZW1zLCBpdGVtU2l6ZV0pID0+ICh7IGl0ZW1zLCBpdGVtU2l6ZSB9KSksXHJcbiAgICAgIHRhcCgoeyBpdGVtcywgaXRlbVNpemUgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbihpdGVtcywgaXRlbVNpemUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGl0ZW1zLCAkY29sbGFwc2VkSXRlbUlkcywgJGl0ZW1Db25maWdNYXAsICR0cmFja0J5XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2l0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnldKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGlkZGVuSXRlbXMgPSBuZXcgQ01hcDxJZCwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICAgICAgbGV0IGlzQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldLCBncm91cCA9IChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDApID4gMCwgY29sbGFwc2VkID0gY29sbGFwc2VkSWRzLmluY2x1ZGVzKGlkKTtcclxuICAgICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgIGhpZGRlbkl0ZW1zLnNldChpZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbEl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKGhpZGRlbkl0ZW1zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY3R1YWxJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEl0ZW1zLm5leHQoYWN0dWFsSXRlbXMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdG9nZ2xlQ2xhc3NOYW1lKGVsLCB2ID8gQ0xBU1NfTElTVF9WRVJUSUNBTCA6IENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgdiA/IENMQVNTX0xJU1RfSE9SSVpPTlRBTCA6IENMQVNTX0xJU1RfVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdGhpcy5fdHJhY2tCb3guaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRtZXRob2RGb3JTZWxlY3RpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQgYXMgYW55O1xyXG4gICAgICAgIGlmICh0aGlzLmdldElzTXVsdGlTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNOb3RTZWxlY3RpbmcgPSB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UubWV0aG9kT2ZTZWxlY3RpbmcgPSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZHluYW1pY1NpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChkeW5hbWljU2l6ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5DYWNoZUNoYW5nZXNJZk5lZWQoZHluYW1pY1NpemUpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIDAgLSBub25lOyAxIC0gaW5zdGFudDtcclxuICAgICAqL1xyXG4gICAgY29uc3QgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8MCB8IDE+KDApLFxyXG4gICAgICAkc2Nyb2xsVG9FbmREdXJpbmdVcGRhdGVDYW5jZWxsZXIgPSBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgICRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gdiA+IDApLFxyXG4gICAgICB0YXAoKHYpID0+IHtcclxuICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIF8kc2Nyb2xsVG9FbmREdXJpbmdVcGRhdGVDYW5jZWxsZXIubmV4dCgwKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZSA9IChwYXJhbXM6IHtcclxuICAgICAgc25hcFNjcm9sbFRvQm90dG9tOiBib29sZWFuOyBib3VuZHM6IElSZWN0OyBsaXN0Qm91bmRzOiBJUmVjdDsgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7IGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uPE9iamVjdD47XHJcbiAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA7IHNjcm9sbFNpemU6IG51bWJlcjsgaXRlbVNpemU6IG51bWJlcjsgYnVmZmVyU2l6ZTogbnVtYmVyOyBtYXhCdWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICAgIHNuYXA6IGJvb2xlYW47IGlzVmVydGljYWw6IGJvb2xlYW47IGR5bmFtaWNTaXplOiBib29sZWFuOyBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuOyBjYWNoZVZlcnNpb246IG51bWJlcjtcclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHNuYXBTY3JvbGxUb0JvdHRvbSwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSxcclxuICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICB9ID0gcGFyYW1zO1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNuYXBTY3JvbGxUb0JvdHRvbSAmJiAhcHJlcGFyZWQgP1xyXG4gICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlci5hY3R1YWxTY3JvbGxIZWlnaHQgPz8gMCA6IHNjcm9sbGVyLmFjdHVhbFNjcm9sbFdpZHRoID8/IDApIDpcclxuICAgICAgICAgIChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsVG9wID8/IDAgOiBzY3JvbGxlci5hY3R1YWxTY3JvbGxMZWZ0ID8/IDApLFxyXG4gICAgICAgICAgdG90YWxTaXplID0gMCwgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfSA9IGJvdW5kcywgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCk7XHJcblxyXG4gICAgICAgIGxldCBzY3JvbGxMZW5ndGggPSBNYXRoLnJvdW5kKHRoaXMuXyR0b3RhbFNpemUuZ2V0VmFsdWUoKSkgPz8gMCxcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbExlbmd0aCA9IE1hdGgucm91bmQoc2Nyb2xsTGVuZ3RoID09PSAwID8gMCA6IHNjcm9sbExlbmd0aCA+IHZpZXdwb3J0U2l6ZSA/IHNjcm9sbExlbmd0aCAtIHZpZXdwb3J0U2l6ZSA6IHNjcm9sbExlbmd0aCksXHJcbiAgICAgICAgICByb3VuZGVkTWF4UG9zaXRpb24gPSBNYXRoLnJvdW5kKGFjdHVhbFNjcm9sbExlbmd0aCksXHJcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IE1hdGgucm91bmQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdHM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIHNuYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHNuYXBTY3JvbGxUb0JvdHRvbSAmJiAhcHJlcGFyZWQpIHtcclxuICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUxIH0gPVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUgfSk7XHJcbiAgICAgICAgICBkaXNwbGF5SXRlbXMgPSBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zO1xyXG4gICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTE7XHJcbiAgICAgICAgICBzY3JvbGxMZW5ndGggPSBNYXRoLnJvdW5kKHRvdGFsU2l6ZSkgPz8gMDtcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbExlbmd0aCA9IE1hdGgucm91bmQoc2Nyb2xsTGVuZ3RoID09PSAwID8gMCA6IHNjcm9sbExlbmd0aCA+IHZpZXdwb3J0U2l6ZSA/IHNjcm9sbExlbmd0aCAtIHZpZXdwb3J0U2l6ZSA6IHNjcm9sbExlbmd0aCk7XHJcbiAgICAgICAgICByb3VuZGVkTWF4UG9zaXRpb24gPSBNYXRoLnJvdW5kKGFjdHVhbFNjcm9sbExlbmd0aCk7XHJcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IE1hdGgucm91bmQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIG9wdHMpO1xyXG4gICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY3JvbGxlci50b3RhbFNpemUgPSB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCh0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICBpZiAoYWN0dWFsU2Nyb2xsTGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaXNTY3JvbGxTdGFydCA9IGlzVXNlclNjcm9sbGluZyAmJiBzY3JvbGxQb3NpdGlvbiA8IE1JTl9TQ1JPTExfVE9fU1RBUlRfUElYRUxTO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChpc1Njcm9sbFN0YXJ0KTtcclxuICAgICAgICAgIGlmIChzbmFwU2Nyb2xsVG9Cb3R0b20gJiYgaXNTY3JvbGxTdGFydCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzbmFwU2Nyb2xsVG9Cb3R0b20gJiYgIWlzU2Nyb2xsU3RhcnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRmluaXNoZWQubmV4dChzY3JvbGxQb3NpdGlvbiA+PSByb3VuZGVkTWF4UG9zaXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsVG9wID8/IDAgOiBzY3JvbGxlci5hY3R1YWxTY3JvbGxMZWZ0ID8/IDApO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICByb3VuZGVkQWN0dWFsU2Nyb2xsU2l6ZSA9IE1hdGgucm91bmQoYWN0dWFsU2Nyb2xsU2l6ZSksXHJcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID0gYWN0dWFsU2Nyb2xsU2l6ZSArIGRlbHRhLFxyXG4gICAgICAgICAgcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBNYXRoLnJvdW5kKHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpLFxyXG4gICAgICAgICAgcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBNYXRoLnJvdW5kKHRvdGFsU2l6ZSAtIHZpZXdwb3J0U2l6ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCB8fCAoISFzbmFwU2Nyb2xsVG9Cb3R0b20gJiYgIXByZXBhcmVkKSB8fFxyXG4gICAgICAgICAgKHNuYXBTY3JvbGxUb0JvdHRvbSAmJiBhY3R1YWxTY3JvbGxTaXplID4gMCAmJlxyXG4gICAgICAgICAgICAoKHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID49IHNjcm9sbFBvc2l0aW9uKSAmJlxyXG4gICAgICAgICAgICAgIChzY3JvbGxQb3NpdGlvbiA+PSByb3VuZGVkTWF4UG9zaXRpb24pICYmXHJcbiAgICAgICAgICAgICAgKHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlID49IHJvdW5kZWRNYXhQb3NpdGlvbikpKSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmID0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgLSByb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgICBzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5nZXRWYWx1ZSgpIHx8IHZpZXdwb3J0U2l6ZSxcclxuICAgICAgICAgICAgICBhbmltYXRlZCA9IHByZXBhcmVkICYmIHJlYWR5VG9TdGFydCAmJiBkaWZmID49IDAgJiYgZGlmZiA8PSBzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCxcclxuICAgICAgICAgICAgICBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUsXHJcbiAgICAgICAgICAgICAgICBiZWhhdmlvcjogKGFuaW1hdGVkID9cclxuICAgICAgICAgICAgICAgICAgQkVIQVZJT1JfU01PT1RIIDogQkVIQVZJT1JfSU5TVEFOVCkgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgICAgICAgICAgICBibGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChyb3VuZGVkQWN0dWFsU2Nyb2xsU2l6ZSAhPT0gcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgJiYgc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLCBibGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgZmlyZVVwZGF0ZTogZmFsc2UsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHNuYXBTY3JvbGxUb0JvdHRvbSwgJGJvdW5kcywgJGxpc3RCb3VuZHMsICRzY3JvbGxFbmRPZmZzZXQsICRhY3R1YWxJdGVtcywgJGl0ZW1Db25maWdNYXAsICRzY3JvbGxTaXplLCAkaXRlbVNpemUsXHJcbiAgICAgICRidWZmZXJTaXplLCAkbWF4QnVmZmVyU2l6ZSwgJHNuYXAsICRpc1ZlcnRpY2FsLCAkZHluYW1pY1NpemUsICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCAkY2FjaGVWZXJzaW9uLCB0aGlzLiR1c2VyU2Nyb2xsLFxyXG4gICAgXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCgoW1xyXG4gICAgICAgIHNuYXBTY3JvbGxUb0JvdHRvbSwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSxcclxuICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICBdKSA9PiB7XHJcbiAgICAgICAgdXBkYXRlKHtcclxuICAgICAgICAgIHNuYXBTY3JvbGxUb0JvdHRvbSwgYm91bmRzOiBib3VuZHMhLCBsaXN0Qm91bmRzOiBsaXN0Qm91bmRzISwgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGVyID0gdGhpcy4kc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKSxcclxuICAgICAgJGxpc3QgPSB0aGlzLiRsaXN0LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJTY3JvbGwgPSB0aGlzLiR2aWV3SW5pdGlhbGl6ZWQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvZih0aGlzLl9zY3JvbGxlckNvbXBvbmVudCkucGlwZShcclxuICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGwpLFxyXG4gICAgICAgICkpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJTY3JvbGxFbmQgPSB0aGlzLiR2aWV3SW5pdGlhbGl6ZWQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvZih0aGlzLl9zY3JvbGxlckNvbXBvbmVudCkucGlwZShcclxuICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxFbmQpLFxyXG4gICAgICAgICkpLFxyXG4gICAgICApO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHNjcm9sbGVyLCBTQ1JPTExFUl9XSEVFTCwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIGZpbHRlcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLm5leHQoMSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQoc2Nyb2xsZXIsIFNDUk9MTEVSX1NDUk9MTEJBUl9TQ1JPTEwsIHsgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5uZXh0KDEpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRkb2NQb2ludGVyVXAgPSBmcm9tRXZlbnQoZG9jdW1lbnQsIE1PVVNFX1VQLCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICksXHJcbiAgICAgICRkb2NQb2ludGVyTGVhdmUgPSBmcm9tRXZlbnQoZG9jdW1lbnQsIE1PVVNFX0xFQVZFLCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICApLFxyXG4gICAgICAkZG9jUG9pbnRlck91dCA9IGZyb21FdmVudChkb2N1bWVudCwgTU9VU0VfT1VULCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICApLFxyXG4gICAgICAkcG9pbnRlck1vdmVUYWtlVW50aWwgPSByYWNlKFskZG9jUG9pbnRlclVwLCAkZG9jUG9pbnRlckxlYXZlLCAkZG9jUG9pbnRlck91dF0pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudChzY3JvbGxlciwgTU9VU0VfRE9XTiwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICRzY3JvbGxlclNjcm9sbC5waXBlKFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkcG9pbnRlck1vdmVUYWtlVW50aWwpLFxyXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZDtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgICAgIHJldHVybiBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLm5leHQoMSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGRvY1RvdWNoVXAgPSBmcm9tRXZlbnQoZG9jdW1lbnQsIFRPVUNIX0VORCwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICApLFxyXG4gICAgICAkZG9jVG91Y2hMZWF2ZSA9IGZyb21FdmVudChkb2N1bWVudCwgVE9VQ0hfTEVBVkUsIHsgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICksXHJcbiAgICAgICRkb2NUb3VjaE91dCA9IGZyb21FdmVudChkb2N1bWVudCwgVE9VQ0hfT1VULCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICApLFxyXG4gICAgICAkdG91Y2hNb3ZlVGFrZVVudGlsID0gcmFjZShbJGRvY1RvdWNoVXAsICRkb2NUb3VjaExlYXZlLCAkZG9jVG91Y2hPdXRdKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQoc2Nyb2xsZXIsIFRPVUNIX1NUQVJULCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKCR0b3VjaE1vdmVUYWtlVW50aWwpLFxyXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZDtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgICAgIHJldHVybiBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLm5leHQoMSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGwucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaXNVc2VyU2Nyb2xsaW5nID0gdXNlckFjdGlvbjtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKHNjcm9sbGVyRWwgJiYgc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRTY29sbFNpemUgPSB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSBjdXJyZW50U2NvbGxTaXplID4gc2Nyb2xsU2l6ZSA/IC0xIDogY3VycmVudFNjb2xsU2l6ZSA8IHNjcm9sbFNpemUgPyAxIDogMDtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zUmFuZ2UgPSBmb3JtYXRBY3R1YWxEaXNwbGF5SXRlbXModGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXMsIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLCB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsIGlzVmVydGljYWwsIGJvdW5kcyksXHJcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBzY3JvbGxlckVsLFxyXG4gICAgICAgICAgICAgIGxpc3Q6IHRoaXMuXyRsaXN0LmdldFZhbHVlKCkhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICBpdGVtc1JhbmdlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAodXNlckFjdGlvbiAmJiAhdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fJHVzZXJTY3JvbGwubmV4dChldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGxFbmQucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaXNVc2VyU2Nyb2xsaW5nID0gdXNlckFjdGlvbjtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKHNjcm9sbGVyRWwgJiYgc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRTY29sbFNpemUgPSB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSBjdXJyZW50U2NvbGxTaXplID4gc2Nyb2xsU2l6ZSA/IC0xIDogY3VycmVudFNjb2xsU2l6ZSA8IHNjcm9sbFNpemUgPyAxIDogMDtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zUmFuZ2UgPSBmb3JtYXRBY3R1YWxEaXNwbGF5SXRlbXModGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXMsIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLCB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsIGlzVmVydGljYWwsIGJvdW5kcyksXHJcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBzY3JvbGxlckVsLFxyXG4gICAgICAgICAgICAgIGxpc3Q6IHRoaXMuXyRsaXN0LmdldFZhbHVlKCkhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICBpdGVtc1JhbmdlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsRW5kLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAodXNlckFjdGlvbiAmJiAhdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fJHVzZXJTY3JvbGwubmV4dChldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGwucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBib3VuZHMgPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCksIGxpc3RCb3VuZHMgPSB0aGlzLl8kbGlzdEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgc2Nyb2xsTGVuZ3RoID0gaXNWZXJ0aWNhbCA/IChsaXN0Qm91bmRzPy5oZWlnaHQgPz8gMCkgLSAoYm91bmRzPy5oZWlnaHQgPz8gMCkgOiAobGlzdEJvdW5kcz8ud2lkdGggPz8gMCkgLSAoYm91bmRzPy53aWR0aCA/PyAwKSxcclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGxTaXplIDwgc2Nyb2xsTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZUhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoc2Nyb2xsZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9vblJlc2l6ZUhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRsaXN0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAobGlzdCA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xpc3RSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICAgICAgdGhpcy5fbGlzdFJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2xpc3RSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vbkxpc3RSZXNpemVIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9saXN0UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShsaXN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVIYW5kbGVyKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsVG8gPSB0aGlzLiRzY3JvbGxUbztcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskc2Nyb2xsZXIsICR0cmFja0J5LCAkc2Nyb2xsVG9dKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbc2Nyb2xsZXJdKSA9PiBzY3JvbGxlciAhPT0gdW5kZWZpbmVkKSxcclxuICAgICAgbWFwKChbc2Nyb2xsZXIsIHRyYWNrQnksIGV2ZW50XSkgPT4gKHsgc2Nyb2xsZXI6IHNjcm9sbGVyLCB0cmFja0J5LCBldmVudCB9KSksXHJcbiAgICAgIHN3aXRjaE1hcCgoeyBzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnQgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkLCBpdGVyYXRpb24gPSAwLFxyXG4gICAgICAgICAgICBpc0xhc3RJdGVyYXRpb24gPSBmYWxzZSwgc2Nyb2xsQ2FsbGVkID0gZmFsc2UsIGNiLFxyXG4gICAgICAgICAgfSA9IGV2ZW50O1xyXG4gICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZHluYW1pY1NpemUgPSB0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKSwgaXRlbVNpemUgPSB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0sXHJcbiAgICAgICAgICAgICAgICBpdGVtQ29uZmlnTWFwID0gdGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKSwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2NvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpLCBtYXhCdWZmZXJTaXplOiB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpICsgZGVsdGEsXHJcbiAgICAgICAgICAgICAgICAgIHNuYXA6IHRoaXMuXyRzbmFwLmdldFZhbHVlKCksIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIG9wdHMpLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsU2l6ZSwgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgICAgICAgICAgICAgIGJsZW5kaW5nOiBmYWxzZSwgZmlyZVVwZGF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgc2Nyb2xsZXI6IHNjcm9sbGVyQ29tcG9uZW50LCBzY3JvbGxDYWxsZWQsIGNiIH1dKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgeyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZSB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwge1xyXG4gICAgICAgICAgICAgICAgLi4ub3B0cywgc2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaXNMYXN0SXRlcmF0aW9uID8gdW5kZWZpbmVkIDogaWQsXHJcbiAgICAgICAgICAgICAgfSksIGRlbHRhMSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhO1xyXG5cclxuICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC50b3RhbFNpemUgPSB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBfc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKF9zY3JvbGxTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBzY3JvbGxlcjogc2Nyb2xsZXJDb21wb25lbnQsIHNjcm9sbENhbGxlZCwgY2IgfV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLm5leHQoMSk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IGN1cnJlbnRTY29sbFNpemU7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICBpZiAoKCFub3RDaGFuZ2VkICYmIGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykgfHwgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dChwYXJhbXMgYXMgSVNjcm9sbFBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2ZhbHNlLCB7XHJcbiAgICAgICAgICAgICAgICAgIGlkLCBzY3JvbGxlcjogc2Nyb2xsZXJDb21wb25lbnQsIGl0ZXJhdGlvbjogaXRlcmF0aW9uICsgMSxcclxuICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlcmF0aW9uOiBub3RDaGFuZ2VkLCBzY3JvbGxDYWxsZWQ6IHRydWUsIGNiXHJcbiAgICAgICAgICAgICAgICB9XSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgZGVsYXkoMSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBzY3JvbGxlcjogc2Nyb2xsZXJDb21wb25lbnQsIHNjcm9sbENhbGxlZCwgY2IgfV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdHJhY2tCeV0gPT09IGlkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpLCBzY3JvbGxTaXplID0gaW5kZXggKiB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvbGxTaXplICE9PSBzY3JvbGxTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgIF8kc2Nyb2xsVG9FbmREdXJpbmdVcGRhdGVDYW5jZWxsZXIubmV4dCgxKTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLCBibGVuZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgc2Nyb2xsZXI6IHNjcm9sbGVyQ29tcG9uZW50LCBjYiB9XSkucGlwZShkZWxheSgxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgc2Nyb2xsZXI6IHNjcm9sbGVyQ29tcG9uZW50LCBjYiB9XSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHBhcmFtcyA9PiAhIXBhcmFtcyksXHJcbiAgICAgIHRhcCgoW2ZpbmlzaGVkLCBwYXJhbXNdKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xyXG4gICAgICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dChwYXJhbXMgYXMgSVNjcm9sbFBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFja0JveC5jYW5jZWxTY3JvbGxTbmFwcGluZ1RvRW5kKHRydWUpO1xyXG5cclxuICAgICAgICBjb25zdCBwID0gcGFyYW1zIGFzIFBpY2s8SVNjcm9sbFBhcmFtcywgJ2NiJyB8ICdzY3JvbGxDYWxsZWQnIHwgJ3Njcm9sbGVyJz47XHJcbiAgICAgICAgaWYgKHAuc2Nyb2xsQ2FsbGVkICYmIHAuc2Nyb2xsZXIpIHtcclxuICAgICAgICAgIHAuY2I/LigpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHApIHtcclxuICAgICAgICAgIGNvbnN0IHsgY2IgfSA9IHA7XHJcbiAgICAgICAgICBjYj8uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRoaXMuJGl0ZW1SZW5kZXJlcjtcclxuXHJcbiAgICAkaXRlbVJlbmRlcmVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGJvdW5kcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoISF2YWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLmVtaXQob2JqZWN0QXNSZWFkb25seSh7IHdpZHRoOiB2YWx1ZS53aWR0aCwgaGVpZ2h0OiB2YWx1ZS5oZWlnaHQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGl0ZW1DbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMub25JdGVtQ2xpY2suZW1pdChvYmplY3RBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nIHx8ICh0aGlzLmlzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgaWYgKCh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHxcclxuICAgICAgICAgICAgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2V0U2VsZWN0ZWRJZHModik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQgPSAwO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQodik7XHJcblxyXG4gICAgICAgIGlmIChpc0NvbGxhcHNlZElkc0ZpcnN0RW1pdCA+PSAyKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgaWYgKChpc0NvbGxhcHNlZElkc0ZpcnN0RW1pdCA9PT0gMiAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8IGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2UuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zZXRDb2xsYXBzZWRJZHModik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kdXNlclNjcm9sbC5uZXh0KHtcclxuICAgICAgc2Nyb2xsU2l6ZTogMCxcclxuICAgICAgc2Nyb2xsV2VpZ2h0OiAwLFxyXG4gICAgICBzaXplOiAwLFxyXG4gICAgICBsaXN0U2l6ZTogMCxcclxuICAgICAgaXNWZXJ0aWNhbDogZmFsc2UsXHJcbiAgICAgIGRpcmVjdGlvbjogMCxcclxuICAgICAgaXNTdGFydDogZmFsc2UsXHJcbiAgICAgIGlzRW5kOiBmYWxzZSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIHNjcm9sbERlbHRhOiAwLFxyXG4gICAgICBpdGVtc1JhbmdlOiB1bmRlZmluZWQsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl8kcHJlcGFyZWQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICghdGhpcy5fdHJhY2tCb3guaGFzRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLkNIQU5HRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVtb3ZlRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQobT86IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZChtZXRob2QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc05vdFNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuTk9ORSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU2luZ2xlU2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5NVUxUSV9TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1ZlcnRpY2FsKGQ/OiBEaXJlY3Rpb24pIHtcclxuICAgIGNvbnN0IGRpciA9IGQgfHwgdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGlzRGlyZWN0aW9uKGRpciwgRGlyZWN0aW9ucy5WRVJUSUNBTCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTGF6eShtPzogQ29sbGVjdGlvbk1vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGlzQ29sbGVjdGlvbk1vZGUobW9kZSwgQ29sbGVjdGlvbk1vZGVzLkxBWlkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKSkge1xyXG4gICAgICBpZiAoIXRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgJiYgdGhpcy5fc25hcENvbnRhaW5lclJlZikge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwQ29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbXAuaW5zdGFuY2UucmVndWxhciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgX2xpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBpZiAoX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgd2hpbGUgKGNvbXBvbmVudHMubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IF9saXN0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc2V0UmVuZGVyZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UmVuZGVyZXJzKGl0ZW1SZW5kZXJlcj86IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50Pikge1xyXG4gICAgY29uc3QgZG9NYXA6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSA9IHt9LCBjb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnRzW2ldO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGlkID0gaXRlbS5pbnN0YW5jZS5pZDtcclxuICAgICAgICBpdGVtLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCAmJiB0aGlzLl8kc25hcC5nZXRWYWx1ZSgpICYmIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgJiYgdGhpcy5fc25hcENvbnRhaW5lclJlZikge1xyXG4gICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudDtcclxuICAgICAgY29tcC5pbnN0YW5jZS5yZW5kZXJlciA9IGl0ZW1SZW5kZXJlciB8fCB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpLCBwcm9wID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsXHJcbiAgICAgIHNpemUgPSB0b3RhbFNpemU7XHJcbiAgICBpZiAobCAmJiBwYXJzZUludChsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbcHJvcF0pICE9PSBzaXplKSB7XHJcbiAgICAgIGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSA9IGAke3NpemV9JHtQWH1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIGFuIGxpc3QgaXRlbSBieSBhIGdpdmVuIGlkLlxyXG4gICAqL1xyXG4gIGZvY3VzKGlkOiBJZCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLk5PTkUpIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVGb2N1c0FsaWdubWVudChhbGlnbik7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oYFske0lURU1fSUR9PVwiJHtpZH1cIl1gKTtcclxuICAgIGlmIChlbCkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihgLiR7SVRFTV9DT05UQUlORVJ9YCk7XHJcbiAgICAgIGlmIChmb2N1c2VkRWwpIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzKGZvY3VzZWRFbCwgYWxpZ24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYj86ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBJU2Nyb2xsT3B0aW9ucykge1xyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHsgaWQsIGJlaGF2aW9yLCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2IgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBzY3JvbGwgYXJlYSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGNiPzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgIHNjcm9sbGVyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcixcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yIGFzIFNjcm9sbEJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCB0cmFja0J5ID0gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSwgaXRlbXMgPSB0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSwgbGF0SXRlbSA9IGl0ZW1zPy5baXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXSwgaWQgPSBsYXRJdGVtPy5bdHJhY2tCeV0sXHJcbiAgICAgIGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7IGlkLCBiZWhhdmlvciwgaXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24sIGlzTGFzdEl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uID09PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGxhc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZFJlZ3VsYXIoKSB7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmNhbmNlbFNjcm9sbFNuYXBwaW5nVG9FbmQodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoO1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KHNjcm9sbFNpemUpO1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBjbGVhcmluZyB0aGUgY2FjaGUuXHJcbiAgICovXHJcbiAgY2FjaGVDbGVhbigpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNhY2hlQ2xlYW4oKTtcclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEZpbmlzaGVkLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fJHRvdGFsU2l6ZS5uZXh0KDApO1xyXG4gICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dCgwKTtcclxuICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgc2Nyb2xsZXJDb21wb25lbnQucmVzZXQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuXyRwcmVwYXJlZC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3BzIHRoZSBsaXN0IGZyb20gc25hcHBpbmcgdG8gdGhlIGJvdHRvbSBlZGdlLlxyXG4gICAqL1xyXG4gIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEZpbmlzaGVkLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCh0cnVlKTtcclxuICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnN0YW50bHkgcmVmcmVzaGVzIHRoZSBsaXN0LlxyXG4gICAqL1xyXG4gIHVwZGF0ZUltbWVkaWF0ZWx5KCkge1xyXG4gICAgdGhpcy5fc2VydmljZS51cGRhdGUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXJrcyB0aGUgbGlzdCBmb3IgYW4gdXBkYXRlIHRoYXQgd2lsbCB0cmlnZ2VyIG9uIHRoZSBuZXh0IHRpY2suXHJcbiAgICovXHJcbiAgbWFya0ZvclVwZGF0ZSgpIHtcclxuICAgIHRoaXMuX3NlcnZpY2UudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG5cclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xyXG4gICAgY29uc3QgdXBkYXRlSWQgPSB0aGlzLl91cGRhdGVJZDtcclxuICAgIGlmICh1cGRhdGVJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUlkKTtcclxuICAgICAgdGhpcy5fdXBkYXRlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3RyYWNrQm94KSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2xpc3RSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9saXN0UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5zaGlmdCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGNsYXNzPVwibmd2bF9fc2NyZWVuLXJlYWRlclwiPlxyXG4gIHt7ICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlIHwgYXN5bmMgfX1cclxuPC9kaXY+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIkc25hcCB8IGFzeW5jXCI+XHJcbiAgPGRpdiAjc25hcHBlZENvbnRhaW5lciBjbGFzcz1cIm5ndmxfX3NuYXBwZWQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2ICNzbmFwcGVkIHBhcnQ9XCJzbmFwcGVkLWl0ZW1cIiBjbGFzcz1cIm5ndmxfX2xpc3Qtc25hcHBlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICNzbmFwUmVuZGVyZXJDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy1zY3JvbGxlciBjbGFzcz1cIm5ndmxfX2xpc3Qtc2Nyb2xsZXJcIiAjc2Nyb2xsZXIgW2NsYXNzZXNdPVwiKCRjbGFzc2VzIHwgYXN5bmMpIVwiXHJcbiAgW3N0YXJ0T2Zmc2V0XT1cIigkc2Nyb2xsU3RhcnRPZmZzZXQgfCBhc3luYykhXCIgW2RpcmVjdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIlxyXG4gIFtlbmRPZmZzZXRdPVwiKCRzY3JvbGxFbmRPZmZzZXQgfCBhc3luYykhXCIgW3Njcm9sbGJhclRoZW1lXT1cIigkc2Nyb2xsYmFyVGhlbWUgfCBhc3luYykhXCJcclxuICBbZm9jdXNlZEVsZW1lbnRdPVwiKCRmb2N1c2VkRWxlbWVudCB8IGFzeW5jKSFcIiBbbG9hZGluZ109XCIoJGxvYWRpbmcgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyTWluU2l6ZV09XCIoJHNjcm9sbGJhck1pblNpemUgfCBhc3luYykhXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAjcmVuZGVyZXJzQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG48L25nLXNjcm9sbGVyPiJdfQ==
1981
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFxQixTQUFTLEVBQTRCLFlBQVksRUFBRSxLQUFLLEVBQ3pGLE1BQU0sRUFBZSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEdBQy9FLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQ2pHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FDbkQsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQ3JHLG1DQUFtQyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFDckksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBYyxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUNsSSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDM0gsNkJBQTZCLEVB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QU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDL0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixFQUNDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDakQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixFQUNELE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RCLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQ2pELFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6QyxFQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxFQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxFQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENB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QUs7Z0JBNEJGLE9BQU87c0JBRFYsS0FBSztnQkErQkYsbUJBQW1CO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LFxyXG4gIE9uRGVzdHJveSwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLFxyXG4gIG9mLCByYWNlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9saXN0LWl0ZW0vbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSxcclxuICBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiwgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfQlVGRkVSX1NJWkUsIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX1NOQVAsIERFRkFVTFRfU05BUFBJTkdfTUVUSE9ELFxyXG4gIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBTQ1JPTExfRU5ELCBUT1BfUFJPUF9OQU1FLCBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUsIERFRkFVTFRfU0VMRUNUX01FVEhPRCwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEVDVElPTl9NT0RFLFxyXG4gIERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFLCBCRUhBVklPUl9TTU9PVEgsIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX0JPVFRPTSxcclxuICBNT1VTRV9ET1dOLCBNT1VTRV9VUCwgTU9VU0VfTEVBVkUsIE1PVVNFX09VVCwgVE9VQ0hfRU5ELCBUT1VDSF9MRUFWRSwgVE9VQ0hfT1VULCBUT1VDSF9TVEFSVCwgU0NST0xMRVJfV0hFRUwsXHJcbiAgU0NST0xMRVJfU0NST0xMQkFSX1NDUk9MTCwgREVGQVVMVF9MQU5HX1RFWFRfRElSLCBERUZBVUxUX1NDUk9MTEJBUl9USEVNRSwgREVGQVVMVF9DTElDS19ESVNUQU5DRSxcclxuICBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OLCBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVNjcm9sbEV2ZW50LCBJU2Nyb2xsT3B0aW9ucywgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCwgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50LCBJZCwgSVJlY3QsIElTaXplLCBTY3JvbGxCYXJUaGVtZSB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25Nb2RlLCBDb2xsZWN0aW9uTW9kZXMsIERpcmVjdGlvbiwgRGlyZWN0aW9ucywgRm9jdXNBbGlnbm1lbnRzLCBNZXRob2RGb3JTZWxlY3RpbmcsIE1ldGhvZHNGb3JTZWxlY3RpbmcsIFNuYXBwaW5nTWV0aG9kLCBTbmFwcGluZ01ldGhvZHMsXHJcbiAgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMsXHJcbn0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IFNjcm9sbEV2ZW50LCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgVHJhY2tCb3hFdmVudHMsIFRyYWNrQm94IH0gZnJvbSAnLi91dGlscy90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZCB9IGZyb20gJy4vdXRpbHMvc25hcHBpbmctbWV0aG9kJztcclxuaW1wb3J0IHsgRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFLCBJU19GSVJFRk9YLCB9IGZyb20gJy4vdXRpbHMvYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL21vZGVscy9iYXNlLXZpcnR1YWwtbGlzdC1pdGVtLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCQxIH0gZnJvbSAnLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgaXNEaXJlY3Rpb24gfSBmcm9tICcuL3V0aWxzL2lzLWRpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSAnLi91dGlscy9pcy1tZXRob2QtZm9yLXNlbGVjdGluZyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyBDTWFwIH0gZnJvbSAnLi91dGlscy9jbWFwJztcclxuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVCb29sZWFuLCB2YWxpZGF0ZUZsb2F0LCB2YWxpZGF0ZUludCwgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSAnLi91dGlscy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgY29weVZhbHVlQXNSZWFkb25seSwgb2JqZWN0QXNSZWFkb25seSB9IGZyb20gJy4vdXRpbHMvb2JqZWN0JztcclxuaW1wb3J0IHsgaXNDb2xsZWN0aW9uTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtY29sbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgSVNjcm9sbFRvUGFyYW1zLCBOZ1Njcm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgSVNjcm9sbFBhcmFtcyB7XHJcbiAgaWQ6IElkO1xyXG4gIGJlaGF2aW9yPzogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCI7XHJcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xyXG4gIGlzTGFzdEl0ZXJhdGlvbj86IGJvb2xlYW47XHJcbiAgc2Nyb2xsQ2FsbGVkPzogYm9vbGVhbjtcclxuICBzY3JvbGxlcj86IEhUTUxFbGVtZW50O1xyXG4gIGNiPzogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuY29uc3QgTUlOX1NDUk9MTF9UT19TVEFSVF9QSVhFTFMgPSAxMCxcclxuICBSQU5HRV9ESVNQTEFZX0lURU1TX0VORF9PRkZTRVQgPSAyMCxcclxuICBST0xFX0xJU1QgPSAnbGlzdCcsXHJcbiAgUk9MRV9MSVNUX0JPWCA9ICdsaXN0Ym94JyxcclxuICBJVEVNX0lEID0gJ2l0ZW0taWQnLFxyXG4gIElURU1fQ09OVEFJTkVSID0gJ25ndmwtaXRlbV9fY29udGFpbmVyJyxcclxuICBSRUFEWV9UT19TVEFSVCA9ICdyZWFkeS10by1zdGFydCcsXHJcbiAgV0FJVF9GT1JfUFJFUEFSQVRJT04gPSAnd2FpdC1mb3ItcHJlcGFyYXRpb24nO1xyXG5cclxuY29uc3QgdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24gPSAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSA8IDApID8gMCA6IHZhbHVlID4gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TID8gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TIDogdmFsdWVcclxufSxcclxuICB2YWxpZGF0ZUlkID0gKGlkOiBJZCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpZCBhcyBzdHJpbmcpIHx8IHZhbGlkYXRlRmxvYXQoaWQgYXMgbnVtYmVyKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBcImlkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSWRgLicpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvciA9IChiZWhhdmlvcjogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcoYmVoYXZpb3IgYXMgc3RyaW5nKSAmJiAoYmVoYXZpb3IgPT09ICdhdXRvJyB8fCBiZWhhdmlvciA9PT0gJ2luc3RhbnQnIHx8IGJlaGF2aW9yID09PSAnc21vb3RoJyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgXCJiZWhhdmlvclwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBhdXRvYCwgYGluc3RhbnRgIG9yIGBzbW9vdGhgLicpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgdmFsaWRhdGVJdGVyYXRpb24gPSAoaXRlcmF0aW9uOiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQoaXRlcmF0aW9uLCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBcIml0ZXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICB9XHJcbiAgfSxcclxuICB2YWxpZGF0ZUZvY3VzQWxpZ25tZW50ID0gKGFsaWduOiBGb2N1c0FsaWdubWVudCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhhbGlnbiBhcyBzdHJpbmcpICYmIChhbGlnbiA9PT0gJ25vbmUnIHx8IGFsaWduID09PSAnc3RhcnQnIHx8IGFsaWduID09PSAnY2VudGVyJyB8fCBhbGlnbiA9PT0gJ2VuZCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIFwiYWxpZ25cIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSBgbm9uZWAsIGBzdGFydGAsIGBjZW50ZXJgIG9yIGBlbmRgLicpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG5jb25zdCBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlID0gKGl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uLCBtZXNzYWdlUGF0dGVybjogc3RyaW5nIHwgdW5kZWZpbmVkLCBzY3JvbGxTaXplOiBudW1iZXIsXHJcbiAgaXNWZXJ0aWNhbDogYm9vbGVhbiwgYm91bmRzOiBJUmVjdCkgPT4ge1xyXG4gIGlmICghbWVzc2FnZVBhdHRlcm4pIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgY29uc3QgbGlzdCA9IGl0ZW1zID8/IFtdLCBzaXplID0gaXNWZXJ0aWNhbCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XHJcbiAgbGV0IHN0YXJ0ID0gTnVtYmVyLk5hTiwgZW5kID0gTnVtYmVyLk5hTiwgcHJldkl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQ7XHJcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgY29uc3QgaXRlbSA9IGxpc3RbaV0sIHBvc2l0aW9uID0gaXNWZXJ0aWNhbCA/IGl0ZW0ubWVhc3VyZXMueSA6IGl0ZW0ubWVhc3VyZXMueCxcclxuICAgICAgaXRlbVNpemUgPSBpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy5oZWlnaHQgOiBpdGVtLm1lYXN1cmVzLndpZHRoO1xyXG4gICAgaWYgKCgocG9zaXRpb24gKyBpdGVtU2l6ZSkgPj0gc2Nyb2xsU2l6ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXJ0KSkge1xyXG4gICAgICBzdGFydCA9IGl0ZW0uaW5kZXggKyAxO1xyXG4gICAgfVxyXG4gICAgaWYgKChwb3NpdGlvbiA+PSAoc2Nyb2xsU2l6ZSArIHNpemUpKSAmJiBOdW1iZXIuaXNOYU4oZW5kKSAmJiBwcmV2SXRlbSkge1xyXG4gICAgICBlbmQgPSBwcmV2SXRlbS5pbmRleCArIDE7XHJcbiAgICB9XHJcbiAgICBwcmV2SXRlbSA9IGl0ZW07XHJcbiAgfVxyXG4gIGlmIChOdW1iZXIuaXNOYU4oc3RhcnQpIHx8IE51bWJlci5pc05hTihlbmQpKSB7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIGxldCBmb3JtYXR0ZWQgPSBtZXNzYWdlUGF0dGVybiA/PyAnJztcclxuICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgnJDEnLCBgJHtzdGFydH1gKTtcclxuICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgnJDInLCBgJHtlbmR9YCk7XHJcbiAgcmV0dXJuIGZvcm1hdHRlZDtcclxufTtcclxuXHJcbmNvbnN0IGZvcm1hdEFjdHVhbERpc3BsYXlJdGVtcyA9IChpdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kT2Zmc2V0OiBudW1iZXIsIHNjcm9sbFNpemU6IG51bWJlcixcclxuICBpc1ZlcnRpY2FsOiBib29sZWFuLCBib3VuZHM6IElTaXplKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgY29uc3QgbGlzdCA9IGl0ZW1zID8/IFtdLCBzaXplID0gaXNWZXJ0aWNhbCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XHJcbiAgbGV0IHN0YXJ0ID0gTnVtYmVyLk5hTiwgZW5kID0gTnVtYmVyLk5hTjtcclxuICBmb3IgKGxldCBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICBjb25zdCBpdGVtID0gbGlzdFtpXSwgcG9zaXRpb24gPSBpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy55IDogaXRlbS5tZWFzdXJlcy54LFxyXG4gICAgICBpdGVtU2l6ZSA9IGlzVmVydGljYWwgPyBpdGVtLm1lYXN1cmVzLmhlaWdodCA6IGl0ZW0ubWVhc3VyZXMud2lkdGg7XHJcbiAgICBpZiAoKHBvc2l0aW9uICsgaXRlbVNpemUgPD0gc2Nyb2xsU2l6ZSArIHN0YXJ0T2Zmc2V0KSkge1xyXG4gICAgICBzdGFydCA9IGl0ZW0uaW5kZXg7XHJcbiAgICB9XHJcbiAgICBpZiAoKChwb3NpdGlvbikgPD0gKHNjcm9sbFNpemUgKyBzaXplIC0gZW5kT2Zmc2V0ICsgUkFOR0VfRElTUExBWV9JVEVNU19FTkRfT0ZGU0VUKSkpIHtcclxuICAgICAgZW5kID0gaXRlbS5pbmRleDtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKE51bWJlci5pc05hTihzdGFydCkgfHwgTnVtYmVyLmlzTmFOKGVuZCkpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHJldHVybiBbc3RhcnQsIGVuZF07XHJcbn07XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdzdHlsZSc6ICdwb3NpdGlvbjogcmVsYXRpdmU7J1xyXG4gIH0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG4gIHByb3ZpZGVyczogW05nVmlydHVhbExpc3RTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RDb21wb25lbnQgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyZXJzQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfbGlzdENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsZXInLCB7IHJlYWQ6IE5nU2Nyb2xsZXJDb21wb25lbnQgfSlcclxuICBwcml2YXRlIF9zY3JvbGxlckNvbXBvbmVudDogTmdTY3JvbGxlckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkbGlzdCA9IHRoaXMuXyRsaXN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgdmlld3BvcnQgc2l6ZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uVmlld3BvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTaXplPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGVsZW1lbnRzIGFyZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gZWxlbWVudHMgYXJlIGNvbGxhcHNlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBzdGFydC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxSZWFjaEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRoZW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxCYXJUaGVtZSB8IHVuZGVmaW5lZD4oREVGQVVMVF9TQ1JPTExCQVJfVEhFTUUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJUaGVtZSA9IHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGhlbWVUcmFuc2Zvcm0gPSAodjogU2Nyb2xsQmFyVGhlbWUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaGVtZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9USEVNRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGJhciB0aGVtZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGVtZSh2OiBTY3JvbGxCYXJUaGVtZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGhlbWVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoZW1lLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRoZW1lKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRoZW1lLmdldFZhbHVlKCkgYXMgU2Nyb2xsQmFyVGhlbWU7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhck1pblNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhck1pblNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyTWluU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1pbmltdW0gc2Nyb2xsYmFyIHNpemUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyTWluU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyTWluU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJNaW5TaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKSBhcyBudW1iZXI7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsb2FkaW5nXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHNjcm9sbEJhciBnb2VzIGludG8gbG9hZGluZyBzdGF0ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbG9hZGluZ1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbG9hZGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyR3YWl0Rm9yUHJlcGFyYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT04pO1xyXG4gIHJlYWRvbmx5ICR3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF93YWl0Rm9yUHJlcGFyYXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIndhaXRGb3JQcmVwYXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0IHdpbGwgd2FpdCB1bnRpbCB0aGUgbGlzdCBpdGVtcyBhcmUgZnVsbHkgcHJlcGFyZWQgYmVmb3JlIGRpc3BsYXlpbmcgdGhlbS4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB3YWl0Rm9yUHJlcGFyYXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3dhaXRGb3JQcmVwYXJhdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHdhaXRGb3JQcmVwYXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UpO1xyXG4gIHJlYWRvbmx5ICRjbGlja0Rpc3RhbmNlID0gdGhpcy5fJGNsaWNrRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY2xpY2tEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gc2Nyb2xsIGRpc3RhbmNlIGF0IHdoaWNoIGEgY2xpY2sgZXZlbnQgaXMgdHJpZ2dlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsaWNrRGlzdGFuY2UodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCkgYXMgbnVtYmVyOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQpO1xyXG4gIHJlYWRvbmx5ICRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VUO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgb2Zmc2V0IHZhbHVlOyBpZiB0aGUgc2Nyb2xsIGFyZWEgdmFsdWUgaXMgZXhjZWVkZWQsIHRoZSBzY3JvbGwgYW5pbWF0aW9uIHdpbGwgYmUgZGlzYWJsZWQuIERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsU3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxTdGFydE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIHN0YXJ0IG9mZnNldCB2YWx1ZTsgRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxTdGFydE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxTdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEVuZE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxFbmRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNjcm9sbCBlbmQgb2Zmc2V0IHZhbHVlOyBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEVuZE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxFbmRPZmZzZXRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBTY3JvbGxUb0JvdHRvbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1NDUk9MTFRPX0JPVFRPTSk7XHJcbiAgcmVhZG9ubHkgJHNuYXBTY3JvbGxUb0JvdHRvbSA9IHRoaXMuXyRzbmFwU2Nyb2xsVG9Cb3R0b20uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBTY3JvbGxUb0JvdHRvbVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBTY3JvbGxUb0JvdHRvbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1NDUk9MTFRPX0JPVFRPTTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsIHdpbGwgYmUgYW5jaG9yZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhdCBzdGFydHVwLi4gRGVmYXVsdCB2YWx1ZSBpcyBcImZhbHNlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvQm90dG9tKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvQm90dG9tLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9Cb3R0b21UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBTY3JvbGxUb0JvdHRvbS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwU2Nyb2xsVG9Cb3R0b20oKSB7IHJldHVybiB0aGlzLl8kc25hcFNjcm9sbFRvQm90dG9tLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihERUZBVUxUX0xBTkdfVEVYVF9ESVIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXJUcmFuc2Zvcm0gPSAodjogVGV4dERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImxhbmdUZXh0RGlyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfTEFOR19URVhUX0RJUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGRpcmVjdGlvbiBvZiB0ZXh0IGZvciB0aGUgbG9jYWxlLlxyXG4gICAqIENhbiBiZSBlaXRoZXIgXCJsdHJcIiAobGVmdC10by1yaWdodCkgb3IgXCJydGxcIiAocmlnaHQtdG8tbGVmdCkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbGFuZ1RleHREaXIodjogVGV4dERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbGFuZ1RleHREaXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRlZmF1bHRJdGVtVmFsdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkZGVmYXVsdEl0ZW1WYWx1ZSA9IHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWZhdWx0SXRlbVZhbHVlKHY6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZGVmYXVsdEl0ZW1WYWx1ZSgpIHsgcmV0dXJuIHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtcyA9IHRoaXMuXyRpdGVtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2LCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldLCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdChpdGVtLCB0cnVlKTtcclxuICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAmJiAhKHZhbGlkYXRlRmxvYXQoaXRlbVt0cmFja0J5XSBhcyBudW1iZXIsIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKGl0ZW1bdHJhY2tCeV0gYXMgc3RyaW5nLCB0cnVlKSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYElWaXJ0dWFsTGlzdENvbGxlY3Rpb25gIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgYXMgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJZHNUcmFuc2Zvcm0gPSAodjogQXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiBhcyBhbnksIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKHYgYXMgYW55LCB0cnVlKSB8fCB2YWxpZGF0ZUZsb2F0KHYgYXMgYW55LCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodiAmJiBBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKGl0ZW0gYXMgYW55KSB8fCB2YWxpZGF0ZUZsb2F0KGl0ZW0gYXMgYW55KTtcclxuICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RlZElkc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEFycmF5PElkPiB8IElkYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPyBbXSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGVkSWRzKHY6IEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RlZElkc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICByZWFkb25seSAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VkSWRzVHJhbnNmb3JtID0gKHY6IEFycmF5PElkPikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2IGFzIGFueSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYgJiYgQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpdGVtIGFzIGFueSkgfHwgdmFsaWRhdGVGbG9hdChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VkSWRzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgQXJyYXk8SWQ+YCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sbGFwc2VkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlZElkcyh2OiBBcnJheTxJZD4pIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzZWRJZHNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdEJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLKTtcclxuICByZWFkb25seSAkc2VsZWN0QnlDbGljayA9IHRoaXMuXyRzZWxlY3RCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0QnlDbGlja1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnLnNlbGVjdCBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdEJ5Q2xpY2soKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0QnlDbGljay5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZUJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0spO1xyXG4gIHJlYWRvbmx5ICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZUJ5Q2xpY2tUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZUJ5Q2xpY2tcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIGNvbmZpZy5jb2xsYXBzZSBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzZUJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxhcHNlQnlDbGlja1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxhcHNlQnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQKTtcclxuICByZWFkb25seSAkc25hcCA9IHRoaXMuXyRzbmFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04pO1xyXG4gIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGVyaW1lbnRhbCFcclxuICAgKiBFbmFibGVzIGJ1ZmZlciBvcHRpbWl6YXRpb24uXHJcbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBpZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiBhcmUgbm90IGFkZGVkIG9yIHVwZGF0ZWQuIE90aGVyd2lzZSwgYXJ0aWZhY3RzIGluIHRoZSBmb3JtIG9mIHR3aXRjaGluZyBvZiB0aGUgc2Nyb2xsIGFyZWEgYXJlIHBvc3NpYmxlLlxyXG4gICAqIFdvcmtzIG9ubHkgaWYgdGhlIHByb3BlcnR5IGR5bmFtaWMgPSB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1SZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVJlbmRlcmVyVHJhbnNmb3JtID0gKHY6IFRlbXBsYXRlUmVmPGFueT4pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG4gICAgaWYgKHYgJiYgISh0eXBlb2Ygdi5lbGVtZW50UmVmID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygdi5jcmVhdGVFbWJlZGRlZFZpZXcgPT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIFwiaXRlbVJlbmRlcmVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgVGVtcGxhdGVSZWZgLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJHJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1SZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1SZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSBhcyBUZW1wbGF0ZVJlZjxhbnk+OyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtQ29uZmlnTWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwPih7fSk7XHJcbiAgcmVhZG9ubHkgJGl0ZW1Db25maWdNYXAgPSB0aGlzLl8kaXRlbUNvbmZpZ01hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbmZpZ01hcFRyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGlkIGluIHYpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2lkXTtcclxuICAgICAgICAgIGlmICghaXRlbSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uY29sbGFwc2FibGUsIHRydWUpIHx8XHJcbiAgICAgICAgICAgICF2YWxpZGF0ZUJvb2xlYW4oaXRlbS5zZWxlY3RhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhKGl0ZW0uc3RpY2t5ID09PSB1bmRlZmluZWQgfHwgaXRlbS5zdGlja3kgPT09IDAgfHwgaXRlbS5zdGlja3kgPT09IDEgfHwgaXRlbS5zdGlja3kgPT09IDIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1Db25maWdNYXBcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwYC4nKTtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBgc3RpY2t5YCBwb3NpdGlvbiwgYGNvbGxhcHNhYmxlYCBhbmQgYHNlbGVjdGFibGVgIGZvciB0aGUgbGlzdCBpdGVtIGVsZW1lbnQuIElmIGBzdGlja3lgIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gYHN0aWNreWAgcG9zaXRpb24gaXMgYXBwbGllZC4gXHJcbiAgICogSWYgdGhlIGBzdGlja3lgIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gdGhlIGBzdGlja3lgIHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIGBzZWxlY3RhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgb3Igbm90LiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKiBgY29sbGFwc2FibGVgIGRldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IHdpdGggYSBgc3RpY2t5YCBwcm9wZXJ0eSBncmVhdGVyIHRoYW4gemVybyBjYW4gY29sbGFwc2UgYW5kIGNvbGxhcHNlIGVsZW1lbnRzIGluIGZyb250IHRoYXQgZG8gbm90IGhhdmUgYSBgc3RpY2t5YCBwcm9wZXJ0eS5cclxuICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL21vZGVscy9pdGVtLWNvbmZpZy1tYXAubW9kZWwudHNcclxuICAgKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtQ29uZmlnTWFwKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbUNvbmZpZ01hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbUNvbmZpZ01hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtQ29uZmlnTWFwKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbCA9IE51bWJlcih2KTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsKSB8fCB2YWwgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZ25vcmVkIGlmIHRoZSBkeW5hbWljU2l6ZSBwcm9wZXJ0eSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1TaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9keW5hbWljU2l6ZVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZHluYW1pY1NpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRFlOQU1JQ19TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLlxyXG4gICAqIElmIGZhbHNlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYSBmaXhlZCBzaXplIHNwZWNpZmllZCBieSB0aGUgaXRlbVNpemUgcHJvcGVydHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGR5bmFtaWNTaXplKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2R5bmFtaWNTaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkeW5hbWljU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHJlYWRvbmx5ICRkaXJlY3Rpb24gPSB0aGlzLl8kZGlyZWN0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9kaXJlY3Rpb25UcmFuc2Zvcm0gPSAodjogRGlyZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnaG9yaXpvbnRhbCcgfHwgdiA9PT0gJ3ZlcnRpY2FsJyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImRpcmVjdGlvblwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9ESVJFQ1RJT047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2RpcmVjdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZGlyZWN0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGVjdGlvbk1vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbGxlY3Rpb25Nb2RlPihERUZBVUxUX0NPTExFQ1RJT05fTU9ERSk7XHJcbiAgcmVhZG9ubHkgJGNvbGxlY3Rpb25Nb2RlID0gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsZWN0aW9uTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vcm1hbCcgfHwgdiA9PT0gJ2xhenknKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZGlyZWN0aW9uXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgYG5vcm1hbGAgb3IgYGxhenlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMRUNUSU9OX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gbW9kZXMgZm9yIGNvbGxlY3Rpb24gZWxlbWVudHMuIERlZmF1bHQgdmFsdWUgaXMgXCJub3JtYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsZWN0aW9uTW9kZSh2OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxlY3Rpb25Nb2RlKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGJ1ZmZlclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9CVUZGRVJfU0laRSk7XHJcbiAgcmVhZG9ubHkgJGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhCdWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFKTtcclxuICByZWFkb25seSAkbWF4QnVmZmVyU2l6ZSA9IHRoaXMuXyRtYXhCdWZmZXJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tYXhCdWZmZXJTaXplVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IHZhbCA9IHY7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYsIHRydWUpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhCdWZmZXJTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgdmFsID0gREVGQVVMVF9NQVhfQlVGRkVSX1NJWkU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IHRoaXMuXyRidWZmZXJTaXplLmdldFZhbHVlKCk7XHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsIDw9IGJ1ZmZlclNpemUpIHtcclxuICAgICAgcmV0dXJuIGJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHJlYWRvbmx5ICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcHBpbmdNZXRob2RUcmFuc2Zvcm0gPSAodjogU25hcHBpbmdNZXRob2QpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub3JtYWwnIHx8IHYgPT09ICdhZHZhbmNlZCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwcGluZ01ldGhvZFwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBub3JtYWxgIG9yIGBhZHZhbmNlZGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBQSU5HX01FVEhPRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKiAnZGVmYXVsdCcgLSBOb3JtYWwgZ3JvdXAgcmVuZGVyaW5nLlxyXG4gICAqICdhZHZhbmNlZCcgLSBUaGUgZ3JvdXAgaXMgcmVuZGVyZWQgb24gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiBMaXN0IGl0ZW1zIGJlbG93IHRoZSBncm91cCBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwcGluZ01ldGhvZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcHBpbmdNZXRob2QubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwcGluZ01ldGhvZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtZXRob2RGb3JTZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGhvZEZvclNlbGVjdGluZz4oREVGQVVMVF9TRUxFQ1RfTUVUSE9EKTtcclxuICByZWFkb25seSAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWV0aG9kRm9yU2VsZWN0aW5nVHJhbnNmb3JtID0gKHY6IE1ldGhvZEZvclNlbGVjdGluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vbmUnIHx8IHYgPT09ICdzZWxlY3QnIHx8ICdtdWx0aS1zZWxlY3QnKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWV0aG9kRm9yU2VsZWN0aW5nXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgYG5vbmVgLCBgc2VsZWN0YCBvciBgbXVsdGktc2VsZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUX01FVEhPRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqICBNZXRob2QgZm9yIHNlbGVjdGluZyBsaXN0IGl0ZW1zLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1ldGhvZEZvclNlbGVjdGluZyh2OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kbWV0aG9kRm9yU2VsZWN0aW5nLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tZXRob2RGb3JTZWxlY3RpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1ldGhvZEZvclNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kdHJhY2tCeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihUUkFDS19CWV9QUk9QRVJUWV9OQU1FKTtcclxuICByZWFkb25seSAkdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF90cmFja0J5VHJhbnNmb3JtID0gKHY6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwidHJhY2tCeVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBUUkFDS19CWV9QUk9QRVJUWV9OQU1FO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3RyYWNrQnlUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcmVhZG9ubHkgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSA9ICh2OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcmVlblJlYWRlck1lc3NhZ2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdlIGZvciBzY3JlZW4gcmVhZGVyLlxyXG4gICAqIFRoZSBtZXNzYWdlIGZvcm1hdCBpczogXCJzb21lIHRleHQgJDEgc29tZSB0ZXh0ICQyXCIsXHJcbiAgICogd2hlcmUgJDEgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24sXHJcbiAgICogJDIgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzY3JlZW4gY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JlZW5SZWFkZXJNZXNzYWdlKHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JlZW5SZWFkZXJNZXNzYWdlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UpO1xyXG4gIHJlYWRvbmx5ICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzVmVydGljYWwgPSB0aGlzLmdldElzVmVydGljYWwoKTtcclxuXHJcbiAgZ2V0IG9yaWVudGF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWwgPyBEaXJlY3Rpb25zLlZFUlRJQ0FMIDogRGlyZWN0aW9ucy5IT1JJWk9OVEFMO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRFbGVtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkZm9jdXNlZEVsZW1lbnQgPSB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGNsYXNzZXMgPSB0aGlzLl8kY2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuICBnZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCkgeyByZXR1cm4gdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOyB9XHJcblxyXG4gIGdldCBkaXNwbGF5SXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc05vdFNlbGVjdGluZyA9IHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNOb3RTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc05vdFNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNTaW5nbGVTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc011bHRpU2VsZWN0aW5nID0gdGhpcy5nZXRJc011bHRpU2VsZWN0aW5nKCk7XHJcbiAgZ2V0IGlzTXVsdGlTZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0aW5nOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSXRlbUlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlY3QgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRvdGFsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3RCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZWN0IHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxTdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbEZpbmlzaGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9saXN0UmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCksIHNjcm9sbGVyID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCksIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSwgc25hcHBlZENvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ/Lmluc3RhbmNlO1xyXG4gICAgaWYgKGxpc3QgJiYgc2Nyb2xsZXIgJiYgc25hcHBlZENvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHsgd2lkdGg6IGxXaWR0aCwgaGVpZ2h0OiBsSGVpZ2h0IH0gPSBsaXN0RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCA6IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPiAwO1xyXG5cclxuICAgICAgbGV0IHNjcm9sbEJhclNpemUgPSBpc1ZlcnRpY2FsID8gd2lkdGggLSBsV2lkdGggOiBoZWlnaHQgLSBsSGVpZ2h0LCBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlLCBvdmVybGFwU2Nyb2xsQmFyU2l6ZSA9IDA7XHJcbiAgICAgIGlmIChzY3JvbGxCYXJTaXplID09PSAwICYmIGlzU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uuc2Nyb2xsQmFyU2l6ZSA9IHNjcm9sbEJhclNpemU7XHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uub3ZlcmxhcFNjcm9sbEJhclNpemUgPSBvdmVybGFwU2Nyb2xsQmFyU2l6ZTtcclxuXHJcbiAgICAgIGNvbnN0IGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxCYXJPdmVybGFwICYmIElTX0ZJUkVGT1gpIHtcclxuICAgICAgICBzY3JvbGxCYXJTaXplID0gb3ZlcmxhcFNjcm9sbEJhclNpemUgPSBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNuYXBwaW5nTWV0aG9kID0gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7XHJcbiAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLk5PUk1BTCB8fCBzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgaWYgKGxhbmdUZXh0RGlyID09PSBUZXh0RGlyZWN0aW9ucy5SVEwpIHtcclxuICAgICAgICAgIHNuYXBwZWRDb21wb25lbnQuZWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAke292ZXJsYXBTY3JvbGxCYXJTaXplfSAwIEwgJHtvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9ICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aCAtIG92ZXJsYXBTY3JvbGxCYXJTaXplfSAwIFpcIilgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LnJlZ3VsYXJMZW5ndGggPSBgJHtpc1ZlcnRpY2FsID8gbGlzdEJvdW5kcy53aWR0aCA6IGxpc3RCb3VuZHMuaGVpZ2h0fSR7UFh9YDtcclxuICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgc2Nyb2xsZXJFbGVtZW50ID0gc2Nyb2xsZXIubmF0aXZlRWxlbWVudCwgZGVsdGEgPSBzbmFwcGVkQ29tcG9uZW50Lml0ZW0/Lm1lYXN1cmVzLmRlbHRhID8/IDA7XHJcblxyXG4gICAgICBsZXQgbGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXI7XHJcbiAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgbGVmdCA9IDA7XHJcbiAgICAgICAgcmlnaHQgPSB3aWR0aCAtIHNjcm9sbEJhclNpemU7XHJcbiAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQ7XHJcbiAgICAgICAgaWYgKHNuYXBwaW5nTWV0aG9kID09PSBTbmFwcGluZ01ldGhvZHMuTk9STUFMIHx8IHNuYXBwaW5nTWV0aG9kID09PSBTbmFwcGluZ01ldGhvZHMuQURWQU5DRUQpIHtcclxuICAgICAgICAgIGlmIChsYW5nVGV4dERpciA9PT0gVGV4dERpcmVjdGlvbnMuUlRMKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwICR7dG9wICsgZGVsdGF9IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIEwgJHtyaWdodH0gMCBMICR7cmlnaHR9ICR7dG9wICsgZGVsdGF9IFpcIilgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZWZ0ID0gc1dpZHRoO1xyXG4gICAgICAgIHJpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgdG9wID0gMDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQgLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLk5PUk1BTCB8fCBzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gJHtsZWZ0ICsgZGVsdGF9IDAgTCAke2xlZnQgKyBkZWx0YX0gJHtib3R0b219IEwgMCAke2JvdHRvbX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcygpO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBpZiAoYm91bmRzKSB7XHJcbiAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh7IHg6IGJvdW5kcy54LCB5OiBib3VuZHMueSwgd2lkdGg6IGJvdW5kcy53aWR0aCwgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fJGJvdW5kcy5uZXh0KHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVSZWd1bGFyUmVuZGVyZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uTGlzdFJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmIChib3VuZHMpIHtcclxuICAgICAgdGhpcy5fJGxpc3RCb3VuZHMubmV4dCh7IHg6IGJvdW5kcy54LCB5OiBib3VuZHMueSwgd2lkdGg6IGJvdW5kcy53aWR0aCwgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fJGxpc3RCb3VuZHMubmV4dCh7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbVRvRm9jdXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHBvc2l0aW9uOiBudW1iZXIsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5DRU5URVIpID0+IHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkhLCB7IHdpZHRoOiBlbGVtZW50V2lkdGgsIGhlaWdodDogZWxlbWVudEhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcclxuICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbDtcclxuICAgICAgbGV0IHBvczogbnVtYmVyID0gTnVtYmVyLk5hTjtcclxuICAgICAgc3dpdGNoIChhbGlnbikge1xyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLlNUQVJUOiB7XHJcbiAgICAgICAgICBwb3MgPSBpc1ZlcnRpY2FsID8gcG9zaXRpb24gOiBwb3NpdGlvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIEZvY3VzQWxpZ25tZW50cy5DRU5URVI6IHtcclxuICAgICAgICAgIHBvcyA9IGlzVmVydGljYWwgPyBwb3NpdGlvbiAtIChoZWlnaHQgLSBlbGVtZW50SGVpZ2h0KSAqIC41IDogcG9zaXRpb24gLSAod2lkdGggLSBlbGVtZW50V2lkdGgpICogLjU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuRU5EOiB7XHJcbiAgICAgICAgICBwb3MgPSBpc1ZlcnRpY2FsID8gcG9zaXRpb24gLSAoaGVpZ2h0IC0gZWxlbWVudEhlaWdodCkgOiBwb3NpdGlvbiAtICh3aWR0aCAtIGVsZW1lbnRXaWR0aCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocG9zKSkge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gc2Nyb2xsZXI/LnNjcm9sbFdpZHRoID8/IDAsIHNjcm9sbEhlaWdodCA9IHNjcm9sbGVyPy5zY3JvbGxIZWlnaHQgPz8gMDtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgaWYgKHBvcyA8IDApIHtcclxuICAgICAgICAgICAgcG9zID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwb3MgPiBzY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgICAgcG9zID0gc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocG9zIDwgMCkge1xyXG4gICAgICAgICAgICBwb3MgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvcyA+IHNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHBvcyA9IHNjcm9sbFdpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCh0cnVlKTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHsgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBwb3MsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yIH07XHJcbiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkdmlld0luaXRpYWxpemVkID0gdGhpcy5fJHZpZXdJbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgY2xhc3MgdHJhY2tCb3hcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveENsYXNzOiBDb21wb25lbnQkMTxUcmFja0JveD4gPSBUcmFja0JveDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSBvZiBlbGVtZW50IHNpemVzIGJ5IHRoZWlyIGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3g6IFRyYWNrQm94ID0gbmV3IHRoaXMuX3RyYWNrQm94Q2xhc3ModGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSk7XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNhY2hlVmVyc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XHJcbiAgZ2V0ICRjYWNoZVZlcnNpb24oKSB7IHJldHVybiB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRwcmVwYXJlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRwcmVwYXJlZCA9IHRoaXMuXyRwcmVwYXJlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGlzUmVzZXRlZFJlYWNoU3RhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHJlYWRvbmx5ICRpc1Jlc2V0ZWRSZWFjaFN0YXJ0ID0gdGhpcy5fJGlzUmVzZXRlZFJlYWNoU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbCA9IG5ldyBTdWJqZWN0PElTY3JvbGxFdmVudD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVzZXJTY3JvbGwgPSBuZXcgU3ViamVjdDxJU2Nyb2xsRXZlbnQ+KCk7XHJcbiAgcmVhZG9ubHkgJHVzZXJTY3JvbGwgPSB0aGlzLl8kdXNlclNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveFJlc2V0SGFuZGxlciA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBpZiAodiAmJiB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICB0aGlzLl8kaXNSZXNldGVkUmVhY2hTdGFydC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBTY3JvbGxPcHRpb25zID0ge1xyXG4gICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiAwLFxyXG4gICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uUHJlcGFyZWRIYW5kbGVyID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuXyRwcmVwYXJlZC5uZXh0KHYpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogTmdWaXJ0dWFsTGlzdFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlJFU0VULCB0aGlzLl9vblRyYWNrQm94UmVzZXRIYW5kbGVyKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuUFJFUEFSRSwgdGhpcy5fb25QcmVwYXJlZEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLl90cmFja0JveCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLml0ZW1Ub0ZvY3VzID0gdGhpcy5pdGVtVG9Gb2N1cztcclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5kaXNwbGF5Q29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIHRoaXMuJHZpZXdJbml0aWFsaXplZC5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxlci5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxWaWV3cG9ydCk7XHJcbiAgICAgICAgdGhpcy5fJGxpc3QubmV4dCh0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsQ29udGVudCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGFuZ1RleHREaXIgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNsaWNrRGlzdGFuY2UgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IHByZXBhcmVkID0gZmFsc2UsIHJlYWR5VG9TdGFydCA9IGZhbHNlLCBpc1VzZXJTY3JvbGxpbmcgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLiRwcmVwYXJlZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICghdikge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZUNsZWFuKCk7XHJcbiAgICAgICAgICByZWFkeVRvU3RhcnQgPSBpc1VzZXJTY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHByZXBhcmVkID0gcmVhZHlUb1N0YXJ0ID0gdjtcclxuICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdiwgW1dBSVRfRk9SX1BSRVBBUkFUSU9OXTogd2FpdEZvclByZXBhcmF0aW9uIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSwgW1JFQURZX1RPX1NUQVJUXTogdHJ1ZSwgW1dBSVRfRk9SX1BSRVBBUkFUSU9OXTogd2FpdEZvclByZXBhcmF0aW9uIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUltbWVkaWF0ZWx5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgZGVsYXkoMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgcHJlcGFyZWQgPSB2O1xyXG4gICAgICAgIHRoaXMudXBkYXRlSW1tZWRpYXRlbHkoKTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlbGF5KDApLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCwgdmFsID0gdiB8fCAhd2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdmFsLCBbV0FJVF9GT1JfUFJFUEFSQVRJT05dOiB3YWl0Rm9yUHJlcGFyYXRpb24gfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbW1lZGlhdGVseSgpO1xyXG4gICAgICB9KSxcclxuICAgICAgZGVsYXkoMTAwMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIHJlYWR5VG9TdGFydCA9IHY7XHJcbiAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlLCBbUkVBRFlfVE9fU1RBUlRdOiB0cnVlLCBbV0FJVF9GT1JfUFJFUEFSQVRJT05dOiB3YWl0Rm9yUHJlcGFyYXRpb24gfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbW1lZGlhdGVseSgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kZm9jdXNlZElkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGZvY3VzZWRFbGVtZW50Lm5leHQodiA/PyB1bmRlZmluZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKGxpc3QgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50ID8/IG51bGw7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkZGVmYXVsdEl0ZW1WYWx1ZSA9IHRoaXMuJGRlZmF1bHRJdGVtVmFsdWUsXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvQm90dG9tID0gdGhpcy4kc25hcFNjcm9sbFRvQm90dG9tLFxyXG4gICAgICAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnksXHJcbiAgICAgICRzZWxlY3RCeUNsaWNrID0gdGhpcy4kc2VsZWN0QnlDbGljayxcclxuICAgICAgJGNvbGxhcHNlQnlDbGljayA9IHRoaXMuJGNvbGxhcHNlQnlDbGljayxcclxuICAgICAgJGlzU2Nyb2xsU3RhcnQgPSB0aGlzLl8kaXNTY3JvbGxTdGFydC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJGlzU2Nyb2xsRmluaXNoZWQgPSB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy4kc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRzY3JvbGxFbmRPZmZzZXQsXHJcbiAgICAgICRpc1ZlcnRpY2FsID0gdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1ZlcnRpY2FsKHYgfHwgREVGQVVMVF9ESVJFQ1RJT04pKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuaXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZHluYW1pY1NpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmR5bmFtaWMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGRlZmF1bHRJdGVtVmFsdWUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmRlZmF1bHRJdGVtVmFsdWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFN0YXJ0T2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl9zZXJ2aWNlLnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl9zZXJ2aWNlLnNjcm9sbEVuZE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNSZXNldGVkUmVhY2hTdGFydCA9IHRoaXMuXyRpc1Jlc2V0ZWRSZWFjaFN0YXJ0LmdldFZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy4kaXNSZXNldGVkUmVhY2hTdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICBpc1Jlc2V0ZWRSZWFjaFN0YXJ0ID0gdjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMSksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaXNSZXNldGVkUmVhY2hTdGFydCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNTY3JvbGxTdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkeVRvU3RhcnQgJiYgdiAmJiAhaXNSZXNldGVkUmVhY2hTdGFydCAmJiB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hTdGFydC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuXyRpc1Jlc2V0ZWRSZWFjaFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsRmluaXNoZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHY7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaEVuZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdEJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2sgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlQnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksXHJcbiAgICAgICRsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgICApLFxyXG4gICAgICAkaXRlbXMgPSB0aGlzLiRpdGVtcy5waXBlKFxyXG4gICAgICAgIG1hcChpID0+ICFpID8gW10gOiBpKSxcclxuICAgICAgKSwgJHNjcm9sbFNpemUgPSB0aGlzLl8kc2Nyb2xsU2l6ZS5hc09ic2VydmFibGUoKSxcclxuICAgICAgJGl0ZW1TaXplID0gdGhpcy4kaXRlbVNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkYnVmZmVyU2l6ZSA9IHRoaXMuJGJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0aGlzLiRtYXhCdWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtQ29uZmlnTWFwID0gdGhpcy4kaXRlbUNvbmZpZ01hcC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+ICF2ID8ge30gOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJHNuYXAgPSB0aGlzLiRzbmFwLFxyXG4gICAgICAkaXNMYXp5ID0gdGhpcy4kY29sbGVjdGlvbk1vZGUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzTGF6eSh2IHx8IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKSksXHJcbiAgICAgICksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRtZXRob2RGb3JTZWxlY3RpbmcgPSB0aGlzLiRtZXRob2RGb3JTZWxlY3RpbmcsXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRoaXMuJHNlbGVjdGVkSWRzLFxyXG4gICAgICAkY29sbGFwc2VkSWRzID0gdGhpcy4kY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzZWRJdGVtSWRzID0gdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBtYXAodiA9PiBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdKSxcclxuICAgICAgKSxcclxuICAgICAgJGFjdHVhbEl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkc2NyZWVuUmVhZGVyTWVzc2FnZSA9IHRoaXMuJHNjcmVlblJlYWRlck1lc3NhZ2UsXHJcbiAgICAgICRkaXNwbGF5SXRlbXMgPSB0aGlzLl9zZXJ2aWNlLiRkaXNwbGF5SXRlbXMsXHJcbiAgICAgICRjYWNoZVZlcnNpb24gPSB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRkaXNwbGF5SXRlbXMsICRzY3JlZW5SZWFkZXJNZXNzYWdlLCAkaXNWZXJ0aWNhbCwgJHNjcm9sbFNpemUsICRib3VuZHNdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgaXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSwgYm91bmRzXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlLm5leHQoXHJcbiAgICAgICAgICBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlKGl0ZW1zLCBzY3JlZW5SZWFkZXJNZXNzYWdlLCBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMhKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNMYXp5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNMYXp5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtcywgJGl0ZW1TaXplXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIG1hcCgoW2l0ZW1zLCBpdGVtU2l6ZV0pID0+ICh7IGl0ZW1zLCBpdGVtU2l6ZSB9KSksXHJcbiAgICAgIHRhcCgoeyBpdGVtcywgaXRlbVNpemUgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbihpdGVtcywgaXRlbVNpemUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGl0ZW1zLCAkY29sbGFwc2VkSXRlbUlkcywgJGl0ZW1Db25maWdNYXAsICR0cmFja0J5XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2l0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnldKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGlkZGVuSXRlbXMgPSBuZXcgQ01hcDxJZCwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICAgICAgbGV0IGlzQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldLCBncm91cCA9IChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDApID4gMCwgY29sbGFwc2VkID0gY29sbGFwc2VkSWRzLmluY2x1ZGVzKGlkKTtcclxuICAgICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgIGhpZGRlbkl0ZW1zLnNldChpZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbEl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKGhpZGRlbkl0ZW1zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY3R1YWxJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEl0ZW1zLm5leHQoYWN0dWFsSXRlbXMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdG9nZ2xlQ2xhc3NOYW1lKGVsLCB2ID8gQ0xBU1NfTElTVF9WRVJUSUNBTCA6IENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgdiA/IENMQVNTX0xJU1RfSE9SSVpPTlRBTCA6IENMQVNTX0xJU1RfVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdGhpcy5fdHJhY2tCb3guaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRtZXRob2RGb3JTZWxlY3RpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQgYXMgYW55O1xyXG4gICAgICAgIGlmICh0aGlzLmdldElzTXVsdGlTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNOb3RTZWxlY3RpbmcgPSB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UubWV0aG9kT2ZTZWxlY3RpbmcgPSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZHluYW1pY1NpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChkeW5hbWljU2l6ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5DYWNoZUNoYW5nZXNJZk5lZWQoZHluYW1pY1NpemUpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIDAgLSBub25lOyAxIC0gaW5zdGFudDtcclxuICAgICAqL1xyXG4gICAgY29uc3QgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8MCB8IDE+KDApLFxyXG4gICAgICAkc2Nyb2xsVG9FbmREdXJpbmdVcGRhdGVDYW5jZWxsZXIgPSBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgICRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gdiA+IDApLFxyXG4gICAgICB0YXAoKHYpID0+IHtcclxuICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIF8kc2Nyb2xsVG9FbmREdXJpbmdVcGRhdGVDYW5jZWxsZXIubmV4dCgwKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZSA9IChwYXJhbXM6IHtcclxuICAgICAgc25hcFNjcm9sbFRvQm90dG9tOiBib29sZWFuOyBib3VuZHM6IElSZWN0OyBsaXN0Qm91bmRzOiBJUmVjdDsgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7IGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uPE9iamVjdD47XHJcbiAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA7IHNjcm9sbFNpemU6IG51bWJlcjsgaXRlbVNpemU6IG51bWJlcjsgYnVmZmVyU2l6ZTogbnVtYmVyOyBtYXhCdWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICAgIHNuYXA6IGJvb2xlYW47IGlzVmVydGljYWw6IGJvb2xlYW47IGR5bmFtaWNTaXplOiBib29sZWFuOyBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuOyBjYWNoZVZlcnNpb246IG51bWJlcjtcclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHNuYXBTY3JvbGxUb0JvdHRvbSwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSxcclxuICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICB9ID0gcGFyYW1zO1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNuYXBTY3JvbGxUb0JvdHRvbSAmJiAhcHJlcGFyZWQgP1xyXG4gICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlci5hY3R1YWxTY3JvbGxIZWlnaHQgPz8gMCA6IHNjcm9sbGVyLmFjdHVhbFNjcm9sbFdpZHRoID8/IDApIDpcclxuICAgICAgICAgIChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsVG9wID8/IDAgOiBzY3JvbGxlci5hY3R1YWxTY3JvbGxMZWZ0ID8/IDApLFxyXG4gICAgICAgICAgdG90YWxTaXplID0gMCwgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfSA9IGJvdW5kcywgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCk7XHJcblxyXG4gICAgICAgIGxldCBzY3JvbGxMZW5ndGggPSBNYXRoLnJvdW5kKHRoaXMuXyR0b3RhbFNpemUuZ2V0VmFsdWUoKSkgPz8gMCxcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbExlbmd0aCA9IE1hdGgucm91bmQoc2Nyb2xsTGVuZ3RoID09PSAwID8gMCA6IHNjcm9sbExlbmd0aCA+IHZpZXdwb3J0U2l6ZSA/IHNjcm9sbExlbmd0aCAtIHZpZXdwb3J0U2l6ZSA6IHNjcm9sbExlbmd0aCksXHJcbiAgICAgICAgICByb3VuZGVkTWF4UG9zaXRpb24gPSBNYXRoLnJvdW5kKGFjdHVhbFNjcm9sbExlbmd0aCksXHJcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IE1hdGgucm91bmQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdHM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIHNuYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHNuYXBTY3JvbGxUb0JvdHRvbSAmJiAhcHJlcGFyZWQpIHtcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSAodG90YWxTaXplID4gdmlld3BvcnRTaXplID8gdG90YWxTaXplIC0gdmlld3BvcnRTaXplIDogMCk7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplMSB9ID1cclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplIH0pO1xyXG4gICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemUxO1xyXG4gICAgICAgICAgc2Nyb2xsTGVuZ3RoID0gTWF0aC5yb3VuZCh0b3RhbFNpemUpID8/IDA7XHJcbiAgICAgICAgICBhY3R1YWxTY3JvbGxMZW5ndGggPSBNYXRoLnJvdW5kKHNjcm9sbExlbmd0aCA9PT0gMCA/IDAgOiBzY3JvbGxMZW5ndGggPiB2aWV3cG9ydFNpemUgPyBzY3JvbGxMZW5ndGggLSB2aWV3cG9ydFNpemUgOiBzY3JvbGxMZW5ndGgpO1xyXG4gICAgICAgICAgcm91bmRlZE1heFBvc2l0aW9uID0gTWF0aC5yb3VuZChhY3R1YWxTY3JvbGxMZW5ndGgpO1xyXG4gICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBNYXRoLnJvdW5kKGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2Nyb2xsZXIudG90YWxTaXplID0gdG90YWxTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl8kdG90YWxTaXplLm5leHQodG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKGFjdHVhbFNjcm9sbExlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsU3RhcnQgPSBpc1VzZXJTY3JvbGxpbmcgJiYgc2Nyb2xsUG9zaXRpb24gPCBNSU5fU0NST0xMX1RPX1NUQVJUX1BJWEVMUztcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoaXNTY3JvbGxTdGFydCk7XHJcbiAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvQm90dG9tICYmIGlzU2Nyb2xsU3RhcnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRmluaXNoZWQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvQm90dG9tICYmICFpc1Njcm9sbFN0YXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEZpbmlzaGVkLm5leHQoc2Nyb2xsUG9zaXRpb24gPj0gcm91bmRlZE1heFBvc2l0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLmFjdHVhbFNjcm9sbFRvcCA/PyAwIDogc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsTGVmdCA/PyAwKTtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgcm91bmRlZEFjdHVhbFNjcm9sbFNpemUgPSBNYXRoLnJvdW5kKGFjdHVhbFNjcm9sbFNpemUpLFxyXG4gICAgICAgICAgc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA9IGFjdHVhbFNjcm9sbFNpemUgKyBkZWx0YSxcclxuICAgICAgICAgIHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID0gTWF0aC5yb3VuZChzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlKSxcclxuICAgICAgICAgIHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlID0gTWF0aC5yb3VuZCh0b3RhbFNpemUgLSB2aWV3cG9ydFNpemUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQgfHwgKCEhc25hcFNjcm9sbFRvQm90dG9tICYmICFwcmVwYXJlZCkgfHxcclxuICAgICAgICAgIChzbmFwU2Nyb2xsVG9Cb3R0b20gJiYgYWN0dWFsU2Nyb2xsU2l6ZSA+IDAgJiZcclxuICAgICAgICAgICAgKChyb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSBzY3JvbGxQb3NpdGlvbikgJiZcclxuICAgICAgICAgICAgICAoc2Nyb2xsUG9zaXRpb24gPj0gcm91bmRlZE1heFBvc2l0aW9uKSAmJlxyXG4gICAgICAgICAgICAgIChyb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSA+PSByb3VuZGVkTWF4UG9zaXRpb24pKSkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRmluaXNoZWQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChyb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGlmZiA9IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlIC0gcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUsXHJcbiAgICAgICAgICAgICAgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQgPSB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKSB8fCB2aWV3cG9ydFNpemUsXHJcbiAgICAgICAgICAgICAgYW5pbWF0ZWQgPSBwcmVwYXJlZCAmJiByZWFkeVRvU3RhcnQgJiYgZGlmZiA+PSAwICYmIGRpZmYgPD0gc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlLFxyXG4gICAgICAgICAgICAgICAgYmVoYXZpb3I6IChhbmltYXRlZCA/XHJcbiAgICAgICAgICAgICAgICAgIEJFSEFWSU9SX1NNT09USCA6IEJFSEFWSU9SX0lOU1RBTlQpIGFzIFNjcm9sbEJlaGF2aW9yLFxyXG4gICAgICAgICAgICAgICAgYmxlbmRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBmaXJlVXBkYXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocm91bmRlZEFjdHVhbFNjcm9sbFNpemUgIT09IHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICYmIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlLFxyXG4gICAgICAgICAgICBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgYmxlbmRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGZpcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRzbmFwU2Nyb2xsVG9Cb3R0b20sICRib3VuZHMsICRsaXN0Qm91bmRzLCAkc2Nyb2xsRW5kT2Zmc2V0LCAkYWN0dWFsSXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSwgJGl0ZW1TaXplLFxyXG4gICAgICAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbiwgdGhpcy4kdXNlclNjcm9sbCxcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAoKFtcclxuICAgICAgICBzbmFwU2Nyb2xsVG9Cb3R0b20sIGJvdW5kcywgbGlzdEJvdW5kcywgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIHVwZGF0ZSh7XHJcbiAgICAgICAgICBzbmFwU2Nyb2xsVG9Cb3R0b20sIGJvdW5kczogYm91bmRzISwgbGlzdEJvdW5kczogbGlzdEJvdW5kcyEsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLFxyXG4gICAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgICB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxlciA9IHRoaXMuJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgdGFrZSgxKSxcclxuICAgICksXHJcbiAgICAgICRsaXN0ID0gdGhpcy4kbGlzdC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgbWFwKHYgPT4gdiEubmF0aXZlRWxlbWVudCksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKSxcclxuICAgICAgJHNjcm9sbGVyU2Nyb2xsID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQpLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kc2Nyb2xsKSxcclxuICAgICAgICApKSxcclxuICAgICAgKSxcclxuICAgICAgJHNjcm9sbGVyU2Nyb2xsRW5kID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQpLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kc2Nyb2xsRW5kKSxcclxuICAgICAgICApKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudChzY3JvbGxlciwgU0NST0xMRVJfV0hFRUwsIHsgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5uZXh0KDEpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHNjcm9sbGVyLCBTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMLCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQ7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIF8kc2Nyb2xsVG9FbmREdXJpbmdVcGRhdGVDYW5jZWxsZXIubmV4dCgxKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkZG9jUG9pbnRlclVwID0gZnJvbUV2ZW50KGRvY3VtZW50LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICApLFxyXG4gICAgICAkZG9jUG9pbnRlckxlYXZlID0gZnJvbUV2ZW50KGRvY3VtZW50LCBNT1VTRV9MRUFWRSwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKSxcclxuICAgICAgJGRvY1BvaW50ZXJPdXQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsIE1PVVNFX09VVCwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKSxcclxuICAgICAgJHBvaW50ZXJNb3ZlVGFrZVVudGlsID0gcmFjZShbJGRvY1BvaW50ZXJVcCwgJGRvY1BvaW50ZXJMZWF2ZSwgJGRvY1BvaW50ZXJPdXRdKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQoc2Nyb2xsZXIsIE1PVVNFX0RPV04sIHsgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGwucGlwZShcclxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICB0YWtlVW50aWwoJHBvaW50ZXJNb3ZlVGFrZVVudGlsKSxcclxuICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQ7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG1hcChlID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5uZXh0KDEpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRkb2NUb3VjaFVwID0gZnJvbUV2ZW50KGRvY3VtZW50LCBUT1VDSF9FTkQsIHsgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKSxcclxuICAgICAgJGRvY1RvdWNoTGVhdmUgPSBmcm9tRXZlbnQoZG9jdW1lbnQsIFRPVUNIX0xFQVZFLCB7IHBhc3NpdmU6IHRydWUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICApLFxyXG4gICAgICAkZG9jVG91Y2hPdXQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsIFRPVUNIX09VVCwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKSxcclxuICAgICAgJHRvdWNoTW92ZVRha2VVbnRpbCA9IHJhY2UoWyRkb2NUb3VjaFVwLCAkZG9jVG91Y2hMZWF2ZSwgJGRvY1RvdWNoT3V0XSkucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICApO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHNjcm9sbGVyLCBUT1VDSF9TVEFSVCwgeyBwYXNzaXZlOiB0cnVlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICRzY3JvbGxlclNjcm9sbC5waXBlKFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkdG91Y2hNb3ZlVGFrZVVudGlsKSxcclxuICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQ7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG1hcChlID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5uZXh0KDEpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGlzVXNlclNjcm9sbGluZyA9IHVzZXJBY3Rpb247XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICBjdXJyZW50U2NvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gY3VycmVudFNjb2xsU2l6ZSA+IHNjcm9sbFNpemUgPyAtMSA6IGN1cnJlbnRTY29sbFNpemUgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcbiAgICAgICAgICBjb25zdCBpdGVtc1JhbmdlID0gZm9ybWF0QWN0dWFsRGlzcGxheUl0ZW1zKHRoaXMuX3NlcnZpY2UuZGlzcGxheUl0ZW1zLCB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMpLFxyXG4gICAgICAgICAgICBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogc2Nyb2xsZXJFbCxcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpIS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgaXRlbXNSYW5nZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5vblNjcm9sbC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGwubmV4dChldmVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHVzZXJBY3Rpb24gJiYgIXRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyR1c2VyU2Nyb2xsLm5leHQoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsRW5kLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGlzVXNlclNjcm9sbGluZyA9IHVzZXJBY3Rpb247XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICBjdXJyZW50U2NvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gY3VycmVudFNjb2xsU2l6ZSA+IHNjcm9sbFNpemUgPyAtMSA6IGN1cnJlbnRTY29sbFNpemUgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcbiAgICAgICAgICBjb25zdCBpdGVtc1JhbmdlID0gZm9ybWF0QWN0dWFsRGlzcGxheUl0ZW1zKHRoaXMuX3NlcnZpY2UuZGlzcGxheUl0ZW1zLCB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMpLFxyXG4gICAgICAgICAgICBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogc2Nyb2xsZXJFbCxcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpIS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgaXRlbXNSYW5nZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGwubmV4dChldmVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHVzZXJBY3Rpb24gJiYgIXRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyR1c2VyU2Nyb2xsLm5leHQoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpLCBsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgIHNjcm9sbExlbmd0aCA9IGlzVmVydGljYWwgPyAobGlzdEJvdW5kcz8uaGVpZ2h0ID8/IDApIC0gKGJvdW5kcz8uaGVpZ2h0ID8/IDApIDogKGxpc3RCb3VuZHM/LndpZHRoID8/IDApIC0gKGJvdW5kcz8ud2lkdGggPz8gMCksXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkge1xyXG4gICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA8IHNjcm9sbExlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNhbmNlbFNjcm9sbFNuYXBwaW5nVG9FbmQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlcikge1xyXG4gICAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHNjcm9sbGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVIYW5kbGVyKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKGxpc3QgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgIHRoaXMuX2xpc3RSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9saXN0UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25MaXN0UmVzaXplSGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5fbGlzdFJlc2l6ZU9ic2VydmVyLm9ic2VydmUobGlzdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX29uUmVzaXplSGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvID0gdGhpcy4kc2Nyb2xsVG87XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHNjcm9sbGVyLCAkdHJhY2tCeSwgJHNjcm9sbFRvXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW3Njcm9sbGVyXSkgPT4gc2Nyb2xsZXIgIT09IHVuZGVmaW5lZCksXHJcbiAgICAgIG1hcCgoW3Njcm9sbGVyLCB0cmFja0J5LCBldmVudF0pID0+ICh7IHNjcm9sbGVyOiBzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnQgfSkpLFxyXG4gICAgICBzd2l0Y2hNYXAoKHsgc2Nyb2xsZXIsIHRyYWNrQnksIGV2ZW50IH0pID0+IHtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZCwgaXRlcmF0aW9uID0gMCxcclxuICAgICAgICAgICAgaXNMYXN0SXRlcmF0aW9uID0gZmFsc2UsIHNjcm9sbENhbGxlZCA9IGZhbHNlLCBjYixcclxuICAgICAgICAgIH0gPSBldmVudDtcclxuICAgICAgICBpZiAoc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCksIGl0ZW1TaXplID0gdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuXyRpdGVtQ29uZmlnTWFwLmdldFZhbHVlKCksIGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCksIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFNjb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICAgICAgICBvcHRzOiBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgICAgICAgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfSwgY29sbGVjdGlvbjogaXRlbXMsIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZTogKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSArIGRlbHRhLFxyXG4gICAgICAgICAgICAgICAgICBzbmFwOiB0aGlzLl8kc25hcC5nZXRWYWx1ZSgpLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBpdGVtQ29uZmlnTWFwLCBvcHRzKSxcclxuICAgICAgICAgICAgICAgIHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLFxyXG4gICAgICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGZpcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIHNjcm9sbGVyOiBzY3JvbGxlckNvbXBvbmVudCwgc2Nyb2xsQ2FsbGVkLCBjYiB9XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHtcclxuICAgICAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgICAgIH0pLCBkZWx0YTEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuXHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQudG90YWxTaXplID0gdG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplICsgZGVsdGExO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgX3Njcm9sbFNpemUgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaWQgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChfc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgc2Nyb2xsZXI6IHNjcm9sbGVyQ29tcG9uZW50LCBzY3JvbGxDYWxsZWQsIGNiIH1dKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXyRzY3JvbGxUb0VuZER1cmluZ1VwZGF0ZUNhbmNlbGxlci5uZXh0KDEpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5vdENoYW5nZWQgPSBhY3R1YWxTY3JvbGxTaXplID09PSBjdXJyZW50U2NvbGxTaXplO1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgaWYgKCghbm90Q2hhbmdlZCAmJiBpdGVyYXRpb24gPCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMpIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQocGFyYW1zIGFzIElTY3JvbGxQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmYWxzZSwge1xyXG4gICAgICAgICAgICAgICAgICBpZCwgc2Nyb2xsZXI6IHNjcm9sbGVyQ29tcG9uZW50LCBpdGVyYXRpb246IGl0ZXJhdGlvbiArIDEsXHJcbiAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZXJhdGlvbjogbm90Q2hhbmdlZCwgc2Nyb2xsQ2FsbGVkOiB0cnVlLCBjYlxyXG4gICAgICAgICAgICAgICAgfV0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGF5KDEpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgc2Nyb2xsZXI6IHNjcm9sbGVyQ29tcG9uZW50LCBzY3JvbGxDYWxsZWQsIGNiIH1dKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtW3RyYWNrQnldID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW50U2NvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSwgc2Nyb2xsU2l6ZSA9IGluZGV4ICogdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb2xsU2l6ZSAhPT0gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICBfJHNjcm9sbFRvRW5kRHVyaW5nVXBkYXRlQ2FuY2VsbGVyLm5leHQoMSk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgYmxlbmRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIHNjcm9sbGVyOiBzY3JvbGxlckNvbXBvbmVudCwgY2IgfV0pLnBpcGUoZGVsYXkoMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIHNjcm9sbGVyOiBzY3JvbGxlckNvbXBvbmVudCwgY2IgfV0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihwYXJhbXMgPT4gISFwYXJhbXMpLFxyXG4gICAgICB0YXAoKFtmaW5pc2hlZCwgcGFyYW1zXSkgPT4ge1xyXG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcclxuICAgICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQocGFyYW1zIGFzIElTY3JvbGxQYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2FuY2VsU2Nyb2xsU25hcHBpbmdUb0VuZCh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcCA9IHBhcmFtcyBhcyBQaWNrPElTY3JvbGxQYXJhbXMsICdjYicgfCAnc2Nyb2xsQ2FsbGVkJyB8ICdzY3JvbGxlcic+O1xyXG4gICAgICAgIGlmIChwLnNjcm9sbENhbGxlZCAmJiBwLnNjcm9sbGVyKSB7XHJcbiAgICAgICAgICBwLmNiPy4oKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGNiIH0gPSBwO1xyXG4gICAgICAgICAgY2I/LigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtUmVuZGVyZXIgPSB0aGlzLiRpdGVtUmVuZGVyZXI7XHJcblxyXG4gICAgJGl0ZW1SZW5kZXJlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpdGVtUmVuZGVyZXIubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRib3VuZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKCEhdmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMub25WaWV3cG9ydENoYW5nZS5lbWl0KG9iamVjdEFzUmVhZG9ubHkoeyB3aWR0aDogdmFsdWUud2lkdGgsIGhlaWdodDogdmFsdWUuaGVpZ2h0IH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRpdGVtQ2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQob2JqZWN0QXNSZWFkb25seSh2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9IDA7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGluZyB8fCAodGhpcy5pc011bHRpU2VsZWN0aW5nICYmIGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPj0gMikpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmICgodGhpcy5pc1NpbmdsZVNlbGVjdGluZyAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8XHJcbiAgICAgICAgICAgIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID09PSAyICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHwgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGNvcHlWYWx1ZUFzUmVhZG9ubHkodikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA8IDMpIHtcclxuICAgICAgICAgIGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNldFNlbGVjdGVkSWRzKHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQgPj0gMikge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmICgoaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc0NvbGxhcHNlZElkc0ZpcnN0RW1pdCA+IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNlLmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0NvbGxhcHNlZElkc0ZpcnN0RW1pdCA8IDMpIHtcclxuICAgICAgICAgIGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2V0Q29sbGFwc2VkSWRzKHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJHVzZXJTY3JvbGwubmV4dCh7XHJcbiAgICAgIHNjcm9sbFNpemU6IDAsXHJcbiAgICAgIHNjcm9sbFdlaWdodDogMCxcclxuICAgICAgc2l6ZTogMCxcclxuICAgICAgbGlzdFNpemU6IDAsXHJcbiAgICAgIGlzVmVydGljYWw6IGZhbHNlLFxyXG4gICAgICBkaXJlY3Rpb246IDAsXHJcbiAgICAgIGlzU3RhcnQ6IGZhbHNlLFxyXG4gICAgICBpc0VuZDogZmFsc2UsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBzY3JvbGxEZWx0YTogMCxcclxuICAgICAgaXRlbXNSYW5nZTogdW5kZWZpbmVkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fJHByZXBhcmVkLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5DYWNoZUNoYW5nZXNJZk5lZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAoIXRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLkNIQU5HRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fdHJhY2tCb3guaGFzRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKG0/OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb3RTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLl8kbWV0aG9kRm9yU2VsZWN0aW5nLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gaXNNZXRob2RGb3JTZWxlY3RpbmcobWV0aG9kLCBNZXRob2RzRm9yU2VsZWN0aW5nLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NpbmdsZVNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNNdWx0aVNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuTVVMVElfU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNWZXJ0aWNhbChkPzogRGlyZWN0aW9uKSB7XHJcbiAgICBjb25zdCBkaXIgPSBkIHx8IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc0xhenkobT86IENvbGxlY3Rpb25Nb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc0NvbGxlY3Rpb25Nb2RlKG1vZGUsIENvbGxlY3Rpb25Nb2Rlcy5MQVpZKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgaWYgKCFkaXNwbGF5SXRlbXMgfHwgIXRoaXMuX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh7fSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuXyRzbmFwLmdldFZhbHVlKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICBjb21wLmluc3RhbmNlLnJlZ3VsYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNuYXBlZERpc3BsYXlDb21wb25lbnQgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94Lml0ZW1zID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgIGNvbnN0IF9saXN0Q29udGFpbmVyUmVmID0gdGhpcy5fbGlzdENvbnRhaW5lclJlZjtcclxuXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBkaXNwbGF5SXRlbXMubGVuZ3RoLCBjb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgaWYgKF9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIHdoaWxlIChjb21wb25lbnRzLmxlbmd0aCA8IG1heExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSBfbGlzdENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNldFJlbmRlcmVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVSZWd1bGFyUmVuZGVyZXIoKSB7XHJcbiAgICB0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldFJlbmRlcmVycyhpdGVtUmVuZGVyZXI/OiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4pIHtcclxuICAgIGNvbnN0IGRvTWFwOiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0gPSB7fSwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gY29tcG9uZW50c1tpXTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBpZCA9IGl0ZW0uaW5zdGFuY2UuaWQ7XHJcbiAgICAgICAgaXRlbS5pbnN0YW5jZS5yZW5kZXJlciA9IGl0ZW1SZW5kZXJlciB8fCB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgZG9NYXBbaWRdID0gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKSAmJiB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcbiAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoZG9NYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYWNraW5nKCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gudHJhY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWw6IGJvb2xlYW4sIHRvdGFsU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSwgcHJvcCA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICBzaXplID0gdG90YWxTaXplO1xyXG4gICAgaWYgKGwgJiYgcGFyc2VJbnQobC5uYXRpdmVFbGVtZW50LnN0eWxlW3Byb3BdKSAhPT0gc2l6ZSkge1xyXG4gICAgICBsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbcHJvcF0gPSBgJHtzaXplfSR7UFh9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50IHdpdGggYSBnaXZlbiBpZFxyXG4gICAqL1xyXG4gIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCB1bmRlZmluZWQge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbUJvdW5kcyhpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1cyhpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FKSB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHZhbGlkYXRlRm9jdXNBbGlnbm1lbnQoYWxpZ24pO1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGBbJHtJVEVNX0lEfT1cIiR7aWR9XCJdYCk7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgY29uc3QgZm9jdXNlZEVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oYC4ke0lURU1fQ09OVEFJTkVSfWApO1xyXG4gICAgICBpZiAoZm9jdXNlZEVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhmb2N1c2VkRWwsIGFsaWduKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1ldGhvZCBzY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbGVtZW50IHdpdGggdGhlIGdpdmVuIGBpZGAgYW5kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzY3JvbGxlZCBhcmVhLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvKGlkOiBJZCwgY2I/OiAoKSA9PiB2b2lkLCBvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7IGlkLCBiZWhhdmlvciwgaXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24sIGlzTGFzdEl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uID09PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGxhc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChjYj86ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBJU2Nyb2xsT3B0aW9ucykge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiZWhhdmlvciA9IG9wdGlvbnM/LmJlaGF2aW9yID8/IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvciBhcyBTY3JvbGxCZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmdldFZhbHVlKCksIGl0ZW1zID0gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCksIGxhdEl0ZW0gPSBpdGVtcz8uW2l0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMF0sIGlkID0gbGF0SXRlbT8uW3RyYWNrQnldLFxyXG4gICAgICBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoeyBpZCwgYmVoYXZpb3IsIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYiB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmRSZWd1bGFyKCkge1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsRmluaXNoZWQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jYW5jZWxTY3JvbGxTbmFwcGluZ1RvRW5kKHRydWUpO1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlci5zY3JvbGxXaWR0aDtcclxuICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChzY3JvbGxTaXplKTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgY2xlYXJpbmcgdGhlIGNhY2hlLlxyXG4gICAqL1xyXG4gIGNhY2hlQ2xlYW4oKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC5jYWNoZUNsZWFuKCk7XHJcbiAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KFtdKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCgwKTtcclxuICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoMCk7XHJcbiAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kcHJlcGFyZWQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wcyB0aGUgbGlzdCBmcm9tIHNuYXBwaW5nIHRvIHRoZSBib3R0b20gZWRnZS5cclxuICAgKi9cclxuICBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCgpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxGaW5pc2hlZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNhbmNlbFNjcm9sbFNuYXBwaW5nVG9FbmQodHJ1ZSk7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFudGx5IHJlZnJlc2hlcyB0aGUgbGlzdC5cclxuICAgKi9cclxuICB1cGRhdGVJbW1lZGlhdGVseSgpIHtcclxuICAgIHRoaXMuX3NlcnZpY2UudXBkYXRlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFya3MgdGhlIGxpc3QgZm9yIGFuIHVwZGF0ZSB0aGF0IHdpbGwgdHJpZ2dlciBvbiB0aGUgbmV4dCB0aWNrLlxyXG4gICAqL1xyXG4gIG1hcmtGb3JVcGRhdGUoKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLl8kdmlld0luaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcclxuICAgIGNvbnN0IHVwZGF0ZUlkID0gdGhpcy5fdXBkYXRlSWQ7XHJcbiAgICBpZiAodXBkYXRlSWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVJZCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZUlkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9saXN0UmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fbGlzdFJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50LmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgd2hpbGUgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIiBjbGFzcz1cIm5ndmxfX3NjcmVlbi1yZWFkZXJcIj5cclxuICB7eyAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSB8IGFzeW5jIH19XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiJHNuYXAgfCBhc3luY1wiPlxyXG4gIDxkaXYgI3NuYXBwZWRDb250YWluZXIgY2xhc3M9XCJuZ3ZsX19zbmFwcGVkLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAjc25hcFJlbmRlcmVyQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctc2Nyb2xsZXIgY2xhc3M9XCJuZ3ZsX19saXN0LXNjcm9sbGVyXCIgI3Njcm9sbGVyIFtjbGFzc2VzXT1cIigkY2xhc3NlcyB8IGFzeW5jKSFcIlxyXG4gIFtzdGFydE9mZnNldF09XCIoJHNjcm9sbFN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZW5kT2Zmc2V0XT1cIigkc2Nyb2xsRW5kT2Zmc2V0IHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJUaGVtZV09XCIoJHNjcm9sbGJhclRoZW1lIHwgYXN5bmMpIVwiXHJcbiAgW2ZvY3VzZWRFbGVtZW50XT1cIigkZm9jdXNlZEVsZW1lbnQgfCBhc3luYykhXCIgW2xvYWRpbmddPVwiKCRsb2FkaW5nIHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhck1pblNpemVdPVwiKCRzY3JvbGxiYXJNaW5TaXplIHwgYXN5bmMpIVwiPlxyXG4gIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9uZy1zY3JvbGxlcj4iXX0=