@jsii/kernel 1.54.0 → 1.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -500,8 +500,8 @@ function deserializeEnum(value, lookup) {
500
500
  if (sep === -1) {
501
501
  throw new Error(`Malformed enum value: ${JSON.stringify(value)}`);
502
502
  }
503
- const typeName = enumLocator.substr(0, sep);
504
- const valueName = enumLocator.substr(sep + 1);
503
+ const typeName = enumLocator.slice(0, sep);
504
+ const valueName = enumLocator.slice(sep + 1);
505
505
  const enumValue = lookup(typeName)[valueName];
506
506
  if (enumValue === undefined) {
507
507
  throw new Error(`No enum member named ${valueName} in ${typeName}`);
@@ -709,4 +709,4 @@ function isByReferenceOnly(obj) {
709
709
  } while (Object.getPrototypeOf((curr = Object.getPrototypeOf(curr))) != null);
710
710
  return false;
711
711
  }
712
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRzs7O0FBRUgsbUNBQW1DO0FBRW5DLCtCQWFlO0FBQ2YsdUNBQXNFO0FBRXRFLHdCQUF3QjtBQW9CeEI7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUU1QixRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQTBDakQsUUFBQSxXQUFXLEdBQWdDO0lBQ3RELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzFCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzVCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7S0FDRjtJQUVELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7WUFDNUIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZE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TUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxHQUFHLEtBQUksSUFBSTtnQkFDbEIsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsR0FBRyxLQUFJLElBQUk7Z0JBQ2xCLFFBQU8sS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssQ0FBQSxLQUFLLFVBQVUsRUFDbEM7Z0JBQ0Esd0ZBQXdGO2dCQUN4RixPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCwyRUFBMkU7S0FDNUUsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtJQUU5RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhhbmRsaW5nIG9mIHR5cGVzIGluIEpTSUlcbiAqXG4gKiBUeXBlcyB3aWxsIGJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSkFWQVNDUklQVCBUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgdW5kZWZpbmVkL251bGwg4pSCICAgZGF0ZSAgICDilIIgc2NhbGFyICgqKSDilIIgICAgIGFycmF5ICAgICDilIIgSlNJSS1jbGFzcyBvYmplY3Qg4pSCIGxpdGVyYWwgb2JqZWN0ICDilIJcbiAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICog4pSCIERFQ0xBUkVEIOKUgiB2b2lkICAgICAgIOKUgiB1bmRlZmluZWQgICAgICDilIIgdW5kZWZpbmVkIOKUgiB1bmRlZmluZWQgIOKUgiB1bmRlZmluZWQgICAgIOKUgiB1bmRlZmluZWQgICAgICAgICDilIIgdW5kZWZpbmVkICAgICAgIOKUglxuICog4pSCIFRZUEUgICAgIOKUgiBkYXRlICAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiB7IGRhdGUgfSAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIHNjYWxhciAoKikg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgdmFsdWUgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIganNvbiAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHN0cmluZyAgICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihqc29uKSDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihqc29uKSDilIJcbiAqIOKUgiAgICAgICAgICDilIIgZW51bSAgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiB7IGVudW0gfSAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBhcnJheSBvZiBUIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIGFycmF5L1IoVCkgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIG1hcCBvZiBUICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihUKSAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgaW50ZXJmYWNlICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiB7IHJlZiB9ICAgICAgICAgICDilIIgeyByZWY6IHByb3h5IH0gIOKUglxuICog4pSCICAgICAgICAgIOKUgiBzdHJ1Y3QgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoVFtrXSkg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGNsYXNzICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIHsgcmVmOiBwcm94eSB9ICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgYW55ICAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHsgZGF0ZSB9ICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihhbnkpICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihhbnkpICDilIJcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICpcbiAqICAtICgqKSBzY2FsYXIgbWVhbnMgJ3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4nXG4gKiAgLSAo4oCgKSB0aHJvdyBpZiBub3QgbnVsbGFibGVcbiAqICAtIC9SKHQpIHJlY3Vyc2Ugd2l0aCBkZWNsYXJlZCB0eXBlIHRcbiAqL1xuXG5pbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQge1xuICBpc09ialJlZixcbiAgaXNXaXJlRGF0ZSxcbiAgaXNXaXJlRW51bSxcbiAgaXNXaXJlTWFwLFxuICBPYmpSZWYsXG4gIFRPS0VOX0RBVEUsXG4gIFRPS0VOX0VOVU0sXG4gIFRPS0VOX01BUCxcbiAgV2lyZURhdGUsXG4gIFdpcmVFbnVtLFxuICBpc1dpcmVTdHJ1Y3QsXG4gIFRPS0VOX1NUUlVDVCxcbn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsganNpaVR5cGVGcW4sIG9iamVjdFJlZmVyZW5jZSwgT2JqZWN0VGFibGUgfSBmcm9tICcuL29iamVjdHMnO1xuXG5pbXBvcnQgeyBhcGkgfSBmcm9tICcuJztcblxuLyoqXG4gKiBBIHNwZWNpZmljIHNpbmdsZXRvbiB0eXBlIHRvIGJlIGV4cGxpY2l0IGFib3V0IGEgVm9pZCB0eXBlXG4gKlxuICogSW4gdGhlIHNwZWMsICd2b2lkJyBpcyByZXByZXNlbnRlZCBhcyAndW5kZWZpbmVkJygqKSwgYnV0IGFsbG93aW5nIHRoZVxuICogdmFsdWUgJ3VuZGVmaW5lZCcgaW4gZnVuY3Rpb24gY2FsbHMgaGFzIGxlYWQgdG8gY29uc3VtZXJzIGZhaWxpbmcgdG8gcGFzc1xuICogdHlwZSBpbmZvcm1hdGlvbiB0aGF0IHRoZXkgaGFkLCBqdXN0IGJlY2F1c2UgdGhleSBkaWRuJ3QgXCJoYXZlIHRvXCIgKHRoZVxuICogcGFyYW1ldGVyIHdhcyBvcHRpb25hbCkuXG4gKlxuICogKCopIEFzIGluLCBkZWNsYXJhdGlvbiBvZiBhIG1ldGhvZCBsb29rcyBsaWtlIHsgcmV0dXJucz86IFR5cGVSZWZlcmVuY2UgfVxuICogYW5kIHRoZSBhYnNlbmNlIG9mIGEgdHlwZSBtZWFucyBpdCByZXR1cm5zICd2b2lkJy5cbiAqL1xuZXhwb3J0IHR5cGUgVm9pZCA9ICd2b2lkJztcblxuLyoqXG4gKiBBIHR5cGUgaW5zdGFuY2UsIG9yIFZvaWRcbiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uYWxWYWx1ZU9yVm9pZCA9IHNwZWMuT3B0aW9uYWxWYWx1ZSB8IFZvaWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsIEZRTiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbXB0eSBqYXZhc2NyaXB0IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkpFQ1RfRlFOID0gJ09iamVjdCc7XG5cbmV4cG9ydCBjb25zdCBTWU1CT0xfV0lSRV9UWVBFID0gU3ltYm9sLmZvcignJGpzaWkkd2lyZVR5cGUkJyk7XG5cbi8qKlxuICogVGhlIHR5cGUga2luZCwgdGhhdCBjb250cm9scyBob3cgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYWJvdmUgdGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2VyaWFsaXphdGlvbkNsYXNzIHtcbiAgVm9pZCA9ICdWb2lkJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgU2NhbGFyID0gJ1NjYWxhcicsXG4gIEpzb24gPSAnSnNvbicsXG4gIEVudW0gPSAnRW51bScsXG4gIEFycmF5ID0gJ0FycmF5JyxcbiAgTWFwID0gJ01hcCcsXG4gIFN0cnVjdCA9ICdTdHJ1Y3QnLFxuICBSZWZlcmVuY2VUeXBlID0gJ1JlZlR5cGUnLFxuICBBbnkgPSAnQW55Jyxcbn1cblxudHlwZSBUeXBlTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IHNwZWMuVHlwZTtcbnR5cGUgU3ltYm9sTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVySG9zdCB7XG4gIHJlYWRvbmx5IG9iamVjdHM6IE9iamVjdFRhYmxlO1xuICBkZWJ1ZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gIGxvb2t1cFR5cGUoZnFuOiBzdHJpbmcpOiBzcGVjLlR5cGU7XG4gIHJlY3Vyc2UoeDogYW55LCB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkKTogYW55O1xuICBmaW5kU3ltYm9sKGZxbjogc3BlYy5GUU4pOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZXJpYWxpemVyIHtcbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gICAgaG9zdDogU2VyaWFsaXplckhvc3QsXG4gICk6IGFueTtcbiAgZGVzZXJpYWxpemUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgICBob3N0OiBTZXJpYWxpemVySG9zdCxcbiAgKTogYW55O1xufVxuXG5leHBvcnQgY29uc3QgU0VSSUFMSVpFUlM6IHsgW2s6IHN0cmluZ106IFNlcmlhbGl6ZXIgfSA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLlZvaWRdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnRXhwZWN0ZWQgdm9pZCwgZ290JywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIF90eXBlLCBob3N0KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBob3N0LmRlYnVnKCdFeHBlY3RlZCB2b2lkLCBnb3QnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkRhdGVdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKTogV2lyZURhdGUgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIERhdGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNXaXJlRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBEYXRlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXJdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBwcmltaXRpdmVUeXBlLnByaW1pdGl2ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSAoJHt0eXBlb2YgdmFsdWV9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHByaW1pdGl2ZVR5cGUucHJpbWl0aXZlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9ICgke3R5cGVvZiB2YWx1ZX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkpzb25dOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICAvLyBKdXN0IHdoYXRldmVyLiBEYXRlcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VyaWFsaXplIHRoZW1zZWx2ZXMgdG8gc3RyaW5ncy5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICAvLyAvIVxcIFRvcC1sZXZlbCBcIm51bGxcIiB3aWxsIHR1cm4gdG8gdW5kZWZpbmVkLCBidXQgYW55IG51bGwgbmVzdGVkIGluIHRoZSB2YWx1ZSBpcyB2YWxpZCBKU09OLCBzbyBpdCdsbCBzdGF5IVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQSBtYXBwaW5nIG9iamVjdCBjYW4gYXJyaXZlIHRob3VnaCBoZXJlLiBUaGlzIHdvdWxkIGJlIHRoZSBjYXNlIGlmIGFueXRoaW5nIHRoYXQgaXMgdmFsaWQgaW50byBhIE1hcDxzdHJpbmcsID8+XG4gICAgICAvLyBpcyBwYXNzZWQgaW50byBhIEpTT04gdHJhbnNmZXIgcG9pbnQuIEluZGVlZCwgdGhvc2UgYXJlIGFsc28gdmFsaWQgSlNPTiEgRm9yIGV4YW1wbGUsIFB5dGhvbiBcImRpY3RzXCIgd2lsbCBiZVxuICAgICAgLy8gc2VyaWFsaXplZCAoYnkgdGhlIFB5dGhvbiBydW50aW1lKSBhcyBhICRqc2lpLm1hcCAodGhlIG1hcHBpbmcgb2JqZWN0KS4gV2UgbmVlZCB0byBkZS1zZXJpYWxpemUgdGhhdCBhcyBhXG4gICAgICAvLyBNYXA8c3RyaW5nLCBKU09OPiBpbiBvcmRlciB0byBvYnRhaW4gdGhlIGNvcnJlY3Qgb3V0cHV0IGJlaGF2aW9yIGhlcmUhXG4gICAgICBpZiAoaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAobWFwSnNvblZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgbWFwSnNvblZhbHVlKTtcblxuICAgICAgZnVuY3Rpb24gbWFwSnNvblZhbHVlKHRvTWFwOiBhbnkpIHtcbiAgICAgICAgaWYgKHRvTWFwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdG9NYXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh0b01hcCwge1xuICAgICAgICAgIHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5FbnVtXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IFdpcmVFbnVtIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBob3N0LmRlYnVnKCdTZXJpYWxpemluZyBlbnVtJyk7XG5cbiAgICAgIGNvbnN0IGVudW1UeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgY29uc3QgZW51bU1hcCA9IGhvc3QuZmluZFN5bWJvbChlbnVtVHlwZS5mcW4pO1xuICAgICAgY29uc3QgZW51bUVudHJ5ID0gT2JqZWN0LmVudHJpZXMoZW51bU1hcCkuZmluZCgoWywgdl0pID0+IHYgPT09IHZhbHVlKTtcbiAgICAgIGlmICghZW51bUVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW50cnkgaW4gJHtlbnVtVHlwZS5mcW59IGhhcyB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgW1RPS0VOX0VOVU1dOiBgJHtlbnVtVHlwZS5mcW59LyR7ZW51bUVudHJ5WzBdfWAgfTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzV2lyZUVudW0odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtUT0tFTl9NQVBdOiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmICghaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICAvLyBDb21wYXRpYmlsaXR5IG1vZGUgd2l0aCBvbGRlciB2ZXJzaW9ucyB0aGF0IGRpZG4ndCB3cmFwIGluIFtUT0tFTl9NQVBdXG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcFZhbHVlcyh2YWx1ZVtUT0tFTl9NQVBdLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogbWFwVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIFNZTUJPTF9XSVJFX1RZUEUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBUT0tFTl9NQVAsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICBUaGlzIGlzIHdoYXQgd2UnZCBsaWtlIHRvIGRvLCBidXQgd2UgY2FuJ3QgYmVjYXVzZSBhdCBsZWFzdCB0aGUgSmF2YSBjbGllbnRcbiAgICAgICAgZG9lcyBub3QgdW5kZXJzdGFuZCBieS12YWx1ZSBzZXJpYWxpemVkIGludGVyZmFjZSB0eXBlcywgc28gd2UnbGwgaGF2ZSB0b1xuICAgICAgICBzZXJpYWxpemUgYnktcmVmZXJlbmNlLiBBZGRpdGlvbmFsbHksIHNlcmlhbGl6aW5nIGtub3duIHByb3BlcnRpZXMgd291bGRcbiAgICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB0aGUgcmV0dXJuIHR5cGUgb2YgYSBtZXRob2QgaXMgYSBVTklPTiBvZiBzdHJ1Y3RzLlxuICAgICAgICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvNDAwXG5cbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc09mKG5hbWVkVHlwZSk7XG5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gLy8gRG9uJ3QgbWFwIGlmIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh2LCBwcm9wc1trZXldLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICAqL1xuXG4gICAgICBob3N0LmRlYnVnKCdSZXR1cm5pbmcgdmFsdWUgdHlwZSBieSByZWZlcmVuY2UnKTtcbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIEVNUFRZX09CSkVDVF9GUU4sIFtcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUgPz8ge30pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUcmVhdCBlbXB0eSBzdHJ1Y3RzIGFzIGB1bmRlZmluZWRgIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy80MTEpXG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgcHJvcHMgPSBwcm9wZXJ0aWVzT2YobmFtZWRUeXBlLCBob3N0Lmxvb2t1cFR5cGUpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgYW4gYXJyYXkgd2hlcmUgYSAke25hbWVkVHlwZS5mcW59IHdhcyBleHBlY3RlZC4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzP2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbWlsYXJseSB0byBzZXJpYWxpemF0aW9uLCB3ZSBtaWdodCBiZSBnZXR0aW5nIGEgcmVmZXJlbmNlIHR5cGUgd2hlcmUgd2UncmVcbiAgICAgIC8vIGV4cGVjdGluZyBhIHZhbHVlIHR5cGUuIEFjY2VwdCB0aGlzIGZvciBub3cgKGJ1dCBhbHNvIHZhbGlkYXRlIHRoYXQgb2JqZWN0XG4gICAgICAvLyBmb3IgcHJlc2VuY2Ugb2YgdGhlIHJpZ2h0IHByb3BlcnRpZXMpLlxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKFxuICAgICAgICAgICdFeHBlY3RlZCB2YWx1ZSB0eXBlIGJ1dCBnb3QgcmVmZXJlbmNlIHR5cGUsIGFjY2VwdGluZyBmb3Igbm93IChhd3NsYWJzL2pzaWkjNDAwKScsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHNhbWUgSU5TVEFOQ0UgKHNob3VsZG4ndCBtYXR0ZXIgYnV0IHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2Vzbid0KVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICAgICAgICAgIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZSxcbiAgICAgICAgICBuYW1lZFR5cGUuZnFuLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBpLmlzV2lyZVN0cnVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBmcW4sIGRhdGEgfSA9IHZhbHVlW2FwaS5UT0tFTl9TVFJVQ1RdO1xuICAgICAgICBpZiAoIWlzQXNzaWduYWJsZShmcW4sIG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXaXJlIHN0cnVjdCB0eXBlICcke2Zxbn0nIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICcke25hbWVkVHlwZS5mcW59J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFB5dGhvbiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2luZyBwbGFpbiBtYXBwaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBTdHJ1Y3RzIChkeWFubWljIHR5cGluZywgWU9MTyEpXG4gICAgICBpZiAoYXBpLmlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVthcGkuVE9LRU5fTUFQXTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSB2YWxpZGF0ZVJlcXVpcmVkUHJvcHModmFsdWUgYXMgYW55LCBuYW1lZFR5cGUuZnFuLCBwcm9wcyk7XG5cbiAgICAgIC8vIFJldHVybiBhIGRpY3QgQ09QWSwgd2UgaGF2ZSBieS12YWx1ZSBzZW1hbnRpY3MgYW55d2F5LlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IE9ialJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIG9iamVjdCByZWZlcmVuY2UsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUoXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnRlcmZhY2VzID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoZXhwZWN0ZWRUeXBlKVxuICAgICAgICA/IFtleHBlY3RlZFR5cGUuZnFuXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChzcGVjLmlzQ2xhc3NUeXBlKGV4cGVjdGVkVHlwZSkgPyBleHBlY3RlZFR5cGUuZnFuIDogRU1QVFlfT0JKRUNUX0ZRTik7XG5cbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlLCBpbnRlcmZhY2VzKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHBhc3MgYSBieS1yZWYgb2JqZWN0IGlzIHRvIGhhdmUgY3JlYXRlZCBpdFxuICAgICAgLy8gcHJldmlvdXNseSBpbnNpZGUgSlNJSSBrZXJuZWwsIHNvIGl0IG11c3QgaGF2ZSBhbiBvYmpyZWYgYWxyZWFkeS5cblxuICAgICAgaWYgKCFpc09ialJlZih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuIH0gPSBob3N0Lm9iamVjdHMuZmluZE9iamVjdCh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IG5hbWVkVHlwZVJlZiA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmIChuYW1lZFR5cGVSZWYuZnFuICE9PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnN0IG5hbWVkVHlwZSA9IGhvc3QubG9va3VwVHlwZShuYW1lZFR5cGVSZWYuZnFuKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3Qgd2UgZ290IGlzIG9mIHRoZSByaWdodCB0eXBlXG4gICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgY2xhc3Nlcywgbm90IGludGVyZmFjZXMsIHNpbmNlIEphdmEgbWlnaHQgcGFzcyB1cyBvYmplY3RzIHRoYXRcbiAgICAgICAgLy8gcHJpdmF0ZWx5IGltcGxlbWVudCBzb21lIGludGVyZmFjZSBhbmQgd2UgY2FuJ3QgcHJvdmUgdGhleSBkb24ndC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy8zOTlcbiAgICAgICAgY29uc3QgZGVjbGFyZWRUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlYy5pc0NsYXNzVHlwZShuYW1lZFR5cGUpICYmXG4gICAgICAgICAgIWlzQXNzaWduYWJsZShmcW4sIGRlY2xhcmVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgT2JqZWN0IG9mIHR5cGUgJHtmcW59IGlzIG5vdCBjb252ZXJ0aWJsZSB0byAke2RlY2xhcmVkVHlwZS5mcW59YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5BbnldOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZSkgPT4gaG9zdC5yZWN1cnNlKGUsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogbm8gY2FzZSBmb3IgXCJFTlVNXCIgaGVyZSwgd2l0aG91dCB0eXBlIGRlY2xhcmF0aW9uIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2VcbiAgICAgIC8vIGJldHdlZW4gYW4gZW51bSBtZW1iZXIgYW5kIGEgc2NhbGFyLlxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSlNJSSBLZXJuZWwgaXMgdW5hYmxlIHRvIHNlcmlhbGl6ZSBgZnVuY3Rpb25gLiBBbiBpbnN0YW5jZSB3aXRoIG1ldGhvZHMgbWlnaHQgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGFuIGBhbnlgIG1ldGhvZD8nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSlNJSSBrZXJuZWwgYXNzdW1wdGlvbiB2aW9sYXRlZCwgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICl9IGlzIG5vdCBhbiBvYmplY3RgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIFNZTUJPTF9XSVJFX1RZUEUgaW4gdmFsdWUgJiZcbiAgICAgICAgKHZhbHVlIGFzIGFueSlbU1lNQk9MX1dJUkVfVFlQRV0gPT09IFRPS0VOX01BUFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXS5zZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUbyBtYWtlIHN1cmUgcGVvcGxlIGFyZW4ndCBnb2luZyB0byB0cnkgYW5kIHJldHVybiBNYXA8PiBvciBTZXQ8PiBvdXQsIHRlc3QgZm9yXG4gICAgICAvLyB0aG9zZSBhbmQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlLiBXZSBjYW4ndCBkZXRlY3QgdGhlc2UgY2FzZXMgYW55IG90aGVyXG4gICAgICAvLyB3YXksIGFuZCB0aGUgYnktdmFsdWUgc2VyaWFsaXplZCBvYmplY3Qgd2lsbCBiZSBxdWl0ZSB1c2VsZXNzLlxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0IHx8IHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJldHVybiBvYmplY3RzIG9mIHR5cGUgU2V0IG9yIE1hcFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGEgcHJldmlvdXMgcmVmZXJlbmNlIHRvIG1haW50YWluIG9iamVjdCBpZGVudGl0eS4gTk9URTogdGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuXG4gICAgICAvLyBhIGRpZmZlcmVudCB0eXBlIHRoYW4gcmVxdWVzdGVkISBUaGlzIGlzIGp1c3QgaG93IGl0IGlzIHJpZ2h0IG5vdy5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICBjb25zdCBwcmV2UmVmID0gb2JqZWN0UmVmZXJlbmNlKHZhbHVlKTtcbiAgICAgIGlmIChwcmV2UmVmKSB7XG4gICAgICAgIHJldHVybiBwcmV2UmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIG9yIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0eXBlLCBwYXNzIG9yIG1ha2UgdGhlIHJlZmVyZW5jZVxuICAgICAgLy8gKExpa2UgcmVndWxhciByZWZ0eXBlIHNlcmlhbGl6YXRpb24sIGJ1dCB3aXRob3V0IHRoZSB0eXBlIGRlcml2YXRpb24gdG8gYW4gaW50ZXJmYWNlKVxuICAgICAgY29uc3QganNpaVR5cGUgPVxuICAgICAgICBqc2lpVHlwZUZxbih2YWx1ZSkgPz9cbiAgICAgICAgKGlzQnlSZWZlcmVuY2VPbmx5KHZhbHVlKSA/IEVNUFRZX09CSkVDVF9GUU4gOiB1bmRlZmluZWQpO1xuICAgICAgaWYgKGpzaWlUeXBlKSB7XG4gICAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvZiBhbiBleHBvcnRlZCB0eXBlLiBFaXRoZXIgYW4gb2JqZWN0XG4gICAgICAvLyBsaXRlcmFsLCBvciBhbiBpbnN0YW5jZSBvZiBhIGZ1bGx5IHByaXZhdGUgY2xhc3MgKGNhbm5vdCBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcykuXG5cbiAgICAgIC8vIFdlIHdpbGwgc2VyaWFsaXplIGJ5LXZhbHVlLCBidXQgcmVjdXJzZSBmb3Igc2VyaWFsaXphdGlvbiBzbyB0aGF0IGlmXG4gICAgICAvLyB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZSBvYmplY3RzLCB0aGV5IHdpbGwgYmUgc2VyaWFsaXplZCBhcHByb3ByaWF0ZWx5LlxuICAgICAgLy8gKEJhc2ljYWxseSwgc2VyaWFsaXplIGFueXRoaW5nIGVsc2UgYXMgYSBtYXAgb2YgJ2FueScpLlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzV2lyZURhdGUodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIERhdGUnKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFNjYWxhcicpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEFycmF5Jyk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVFbnVtKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYW4gRW51bScpO1xuICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgICAgfVxuICAgICAgaWYgKGlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICAgIGNvbnN0IG1hcE9mQW55OiBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlID0ge1xuICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgeyB0eXBlOiBtYXBPZkFueSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFJlZicpO1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdmFsdWUgaGFzIGEgc3RydWN0IHRva2VuLCBpdCB3YXMgc2VyaWFsaXplZCBieSBhIHR5cGVkIGpzaWlcbiAgICAgIC8vIHN0cnVjdCwgYnV0IHNpbmNlIHRoZSBkZXNlcmlhbGl6YXRpb24gdGFyZ2V0IGlzIEFOWSwgYWxsIHdlIGNhbiBkbyBpc1xuICAgICAgLy8gc3RyaXAgdGhlIGRhdGEgZnJvbSAkanNpaS5zdHJ1Y3QgYW5kIGNvbnRpbnVlIHRvIGRlc2VyaWFsaXplIGFzIEFOWS5cbiAgICAgIGlmIChpc1dpcmVTdHJ1Y3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgZnFuLCBkYXRhIH0gPSB2YWx1ZVtUT0tFTl9TVFJVQ1RdO1xuICAgICAgICBob3N0LmRlYnVnKGBBTlkgaXMgYSBzdHJ1Y3Qgb2YgdHlwZSAke2Zxbn1gKTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgeyB0eXBlOiB7IGZxbiB9IH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCBhZ2FpbiwgZGVzZXJpYWxpemUgYnktdmFsdWUuXG4gICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBNYXAnKTtcbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlKHZhbHVlOiBEYXRlKTogV2lyZURhdGUge1xuICByZXR1cm4geyBbVE9LRU5fREFURV06IHZhbHVlLnRvSVNPU3RyaW5nKCkgfTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVEYXRlKHZhbHVlOiBXaXJlRGF0ZSk6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUodmFsdWVbVE9LRU5fREFURV0pO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZUVudW0odmFsdWU6IFdpcmVFbnVtLCBsb29rdXA6IFN5bWJvbExvb2t1cCkge1xuICBjb25zdCBlbnVtTG9jYXRvciA9IHZhbHVlW1RPS0VOX0VOVU1dO1xuICBjb25zdCBzZXAgPSBlbnVtTG9jYXRvci5sYXN0SW5kZXhPZignLycpO1xuICBpZiAoc2VwID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGVudW0gdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSBlbnVtTG9jYXRvci5zdWJzdHIoMCwgc2VwKTtcbiAgY29uc3QgdmFsdWVOYW1lID0gZW51bUxvY2F0b3Iuc3Vic3RyKHNlcCArIDEpO1xuXG4gIGNvbnN0IGVudW1WYWx1ZSA9IGxvb2t1cCh0eXBlTmFtZSlbdmFsdWVOYW1lXTtcbiAgaWYgKGVudW1WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBlbnVtIG1lbWJlciBuYW1lZCAke3ZhbHVlTmFtZX0gaW4gJHt0eXBlTmFtZX1gKTtcbiAgfVxuICByZXR1cm4gZW51bVZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVTZXJpYWxpemF0aW9uIHtcbiAgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3M7XG4gIHR5cGVSZWY6IE9wdGlvbmFsVmFsdWVPclZvaWQ7XG59XG5cbi8qKlxuICogRnJvbSBhIHR5cGUgcmVmZXJlbmNlLCByZXR1cm4gdGhlIHBvc3NpYmxlIHNlcmlhbGl6YXRpb24gdHlwZXNcbiAqXG4gKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUsIGJlY2F1c2UgdGhlIHR5cGUgY2FuIGJlIGEgdHlwZSB1bmlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6YXRpb25UeXBlKFxuICB0eXBlUmVmOiBPcHRpb25hbFZhbHVlT3JWb2lkLFxuICBsb29rdXA6IFR5cGVMb29rdXAsXG4pOiBUeXBlU2VyaWFsaXphdGlvbltdIHtcbiAgaWYgKHR5cGVSZWYgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIktlcm5lbCBlcnJvcjogZXhwZWN0ZWQgdHlwZSBpbmZvcm1hdGlvbiwgZ290ICd1bmRlZmluZWQnXCIpO1xuICB9XG4gIGlmICh0eXBlUmVmID09PSAndm9pZCcpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuVm9pZCwgdHlwZVJlZiB9XTtcbiAgfVxuICBpZiAoc3BlYy5pc1ByaW1pdGl2ZVR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIHN3aXRjaCAodHlwZVJlZi50eXBlLnByaW1pdGl2ZSkge1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuQW55OlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuQW55LCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuRGF0ZTpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkRhdGUsIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Kc29uOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuSnNvbiwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkJvb2xlYW46XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5TdHJpbmc6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXIsIHR5cGVSZWYgfV07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1pdGl2ZSB0eXBlJyk7XG4gIH1cbiAgaWYgKHNwZWMuaXNDb2xsZWN0aW9uVHlwZVJlZmVyZW5jZSh0eXBlUmVmLnR5cGUpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgc2VyaWFsaXphdGlvbkNsYXNzOlxuICAgICAgICAgIHR5cGVSZWYudHlwZS5jb2xsZWN0aW9uLmtpbmQgPT09IHNwZWMuQ29sbGVjdGlvbktpbmQuQXJyYXlcbiAgICAgICAgICAgID8gU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5XG4gICAgICAgICAgICA6IFNlcmlhbGl6YXRpb25DbGFzcy5NYXAsXG4gICAgICAgIHR5cGVSZWYsXG4gICAgICB9LFxuICAgIF07XG4gIH1cbiAgaWYgKHNwZWMuaXNVbmlvblR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIGNvbnN0IGNvbXBvdW5kVHlwZXMgPSBmbGF0TWFwKHR5cGVSZWYudHlwZS51bmlvbi50eXBlcywgKHQpID0+XG4gICAgICBzZXJpYWxpemF0aW9uVHlwZSh7IHR5cGU6IHQgfSwgbG9va3VwKSxcbiAgICApO1xuICAgIC8vIFByb3BhZ2F0ZSB0aGUgdG9wLWxldmVsICdvcHRpb25hbCcgZmllbGQgdG8gZWFjaCBpbmRpdmlkdWFsIHN1YnR5cGVcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tcG91bmRUeXBlcykge1xuICAgICAgaWYgKHQudHlwZVJlZiAhPT0gJ3ZvaWQnKSB7XG4gICAgICAgIHQudHlwZVJlZi5vcHRpb25hbCA9IHR5cGVSZWYub3B0aW9uYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21wb3VuZFR5cGVzLnNvcnQoKGwsIHIpID0+XG4gICAgICBjb21wYXJlU2VyaWFsaXphdGlvbkNsYXNzZXMobC5zZXJpYWxpemF0aW9uQ2xhc3MsIHIuc2VyaWFsaXphdGlvbkNsYXNzKSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIG5leHQgcGFydCBvZiB0aGUgY29udmVyc2lvbiBpcyBsb29rdXAtZGVwZW5kZW50XG4gIGNvbnN0IHR5cGUgPSBsb29rdXAodHlwZVJlZi50eXBlLmZxbik7XG5cbiAgaWYgKHNwZWMuaXNFbnVtVHlwZSh0eXBlKSkge1xuICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5FbnVtLCB0eXBlUmVmIH1dO1xuICB9XG5cbiAgaWYgKHNwZWMuaXNJbnRlcmZhY2VUeXBlKHR5cGUpICYmIHR5cGUuZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0LCB0eXBlUmVmIH1dO1xuICB9XG5cbiAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlJlZmVyZW5jZVR5cGUsIHR5cGVSZWYgfV07XG59XG5cbmZ1bmN0aW9uIG51bGxBbmRPayh4OiB1bmtub3duLCB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkKTogYm9vbGVhbiB7XG4gIGlmICh4ICE9IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZSAhPT0gJ3ZvaWQnICYmICF0eXBlLm9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEdvdCAndW5kZWZpbmVkJyBmb3Igbm9uLW9wdGlvbmFsIGluc3RhbmNlIG9mICR7SlNPTi5zdHJpbmdpZnkodHlwZSl9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGF0ZSh4OiB1bmtub3duKTogeCBpcyBEYXRlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICApO1xufVxuXG5mdW5jdGlvbiBpc1NjYWxhcih4OiB1bmtub3duKTogeCBpcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgeCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHggPT09ICdudW1iZXInIHx8IHR5cGVvZiB4ID09PSAnYm9vbGVhbidcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmxhdE1hcDxULCBVPih4czogVFtdLCBmbjogKHg6IFQpID0+IFVbXSk6IFVbXSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxVPigpO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXQucHVzaCguLi5mbih4KSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBNYXAgYW4gb2JqZWN0J3MgdmFsdWVzLCBza2lwcGluZyAndW5kZWZpbmVkJyB2YWx1ZXMnXG4gKi9cbmZ1bmN0aW9uIG1hcFZhbHVlcyhcbiAgdmFsdWU6IHVua25vd24sXG4gIGZuOiAodmFsdWU6IGFueSwgZmllbGQ6IHN0cmluZykgPT4gYW55LFxuKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIH1cblxuICBjb25zdCBvdXQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgY29uc3Qgd2lyZVZhbHVlID0gZm4odiwgayk7XG4gICAgaWYgKHdpcmVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0W2tdID0gd2lyZVZhbHVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNPZihcbiAgdDogc3BlYy5UeXBlLFxuICBsb29rdXA6IFR5cGVMb29rdXAsXG4pOiB7IFtuYW1lOiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0ge1xuICBpZiAoIXNwZWMuaXNDbGFzc09ySW50ZXJmYWNlVHlwZSh0KSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGxldCByZXQ6IHsgW25hbWU6IHN0cmluZ106IHNwZWMuUHJvcGVydHkgfSA9IHt9O1xuXG4gIGlmICh0LmludGVyZmFjZXMpIHtcbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHQuaW50ZXJmYWNlcykge1xuICAgICAgcmV0ID0geyAuLi5yZXQsIC4uLnByb3BlcnRpZXNPZihsb29rdXAoaWZhY2UpLCBsb29rdXApIH07XG4gICAgfVxuICB9XG4gIGlmIChzcGVjLmlzQ2xhc3NUeXBlKHQpICYmIHQuYmFzZSkge1xuICAgIHJldCA9IHsgLi4ucmV0LCAuLi5wcm9wZXJ0aWVzT2YobG9va3VwKHQuYmFzZSksIGxvb2t1cCkgfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiB0LnByb3BlcnRpZXMgPz8gW10pIHtcbiAgICByZXRbcHJvcC5uYW1lXSA9IHByb3A7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBnaXZlbiB0eXBlIChieSBpdCdzIEZRTikgY2FuIGJlIGFzc2lnbmVkIHRvIGEgbmFtZWQgdHlwZSByZWZlcmVuY2UuXG4gKlxuICogQHBhcmFtIGFjdHVhbFR5cGVGcW4gdGhlIEZRTiBvZiB0aGUgdHlwZSB0aGF0IGlzIGJlaW5nIHRlc3RlZC5cbiAqIEBwYXJhbSByZXF1aXJlZFR5cGUgIHRoZSByZXF1aXJlZCByZWZlcmVuY2UgdHlwZS5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGBgcmVxdWlyZWRUeXBlYGAgaXMgYSBzdXBlci10eXBlIChiYXNlIGNsYXNzIG9yIGltcGxlbWVudGVkIGludGVyZmFjZSkgb2YgdGhlIHR5cGUgZGVzaWduYXRlZCBieVxuICogICAgICAgICAgYGBhY3R1YWxUeXBlRnFuYGAuXG4gKi9cbmZ1bmN0aW9uIGlzQXNzaWduYWJsZShcbiAgYWN0dWFsVHlwZUZxbjogc3RyaW5nLFxuICByZXF1aXJlZFR5cGU6IHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlLFxuICBsb29rdXA6IFR5cGVMb29rdXAsXG4pOiBib29sZWFuIHtcbiAgLy8gVGhlIGVtcHR5IG9iamVjdCBpcyBhc3NpZ25hYmxlIHRvIGV2ZXJ5dGhpbmdcbiAgaWYgKGFjdHVhbFR5cGVGcW4gPT09IEVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlZFR5cGUuZnFuID09PSBhY3R1YWxUeXBlRnFuKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgYWN0dWFsVHlwZSA9IGxvb2t1cChhY3R1YWxUeXBlRnFuKTtcbiAgaWYgKHNwZWMuaXNDbGFzc1R5cGUoYWN0dWFsVHlwZSkpIHtcbiAgICBpZiAoXG4gICAgICBhY3R1YWxUeXBlLmJhc2UgJiZcbiAgICAgIGlzQXNzaWduYWJsZShhY3R1YWxUeXBlLmJhc2UsIHJlcXVpcmVkVHlwZSwgbG9va3VwKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChzcGVjLmlzQ2xhc3NPckludGVyZmFjZVR5cGUoYWN0dWFsVHlwZSkgJiYgYWN0dWFsVHlwZS5pbnRlcmZhY2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdHVhbFR5cGUuaW50ZXJmYWNlcy5maW5kKChpZmFjZSkgPT5cbiAgICAgICAgaXNBc3NpZ25hYmxlKGlmYWNlLCByZXF1aXJlZFR5cGUsIGxvb2t1cCksXG4gICAgICApICE9IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICBhY3R1YWxQcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgdHlwZU5hbWU6IHN0cmluZyxcbiAgc3BlY1Byb3BzOiB7IFtrZXk6IHN0cmluZ106IHNwZWMuUHJvcGVydHkgfSxcbikge1xuICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgcHJvcGVydGllc1xuICBjb25zdCBtaXNzaW5nUmVxdWlyZWRQcm9wcyA9IE9iamVjdC5rZXlzKHNwZWNQcm9wcylcbiAgICAuZmlsdGVyKChuYW1lKSA9PiAhc3BlY1Byb3BzW25hbWVdLm9wdGlvbmFsKVxuICAgIC5maWx0ZXIoKG5hbWUpID0+ICEobmFtZSBpbiBhY3R1YWxQcm9wcykpO1xuXG4gIGlmIChtaXNzaW5nUmVxdWlyZWRQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydGllcyBmb3IgJHt0eXBlTmFtZX06ICR7bWlzc2luZ1JlcXVpcmVkUHJvcHMuam9pbihcbiAgICAgICAgJywgJyxcbiAgICAgICl9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFjdHVhbFByb3BzO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlU2VyaWFsaXphdGlvbkNsYXNzZXMoXG4gIGw6IFNlcmlhbGl6YXRpb25DbGFzcyxcbiAgcjogU2VyaWFsaXphdGlvbkNsYXNzLFxuKTogbnVtYmVyIHtcbiAgY29uc3Qgb3JkZXIgPSBbXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlZvaWQsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkRhdGUsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhcixcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuSnNvbixcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuRW51bSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuQXJyYXksXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLk1hcCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0LFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5BbnksXG4gIF07XG4gIHJldHVybiBvcmRlci5pbmRleE9mKGwpIC0gb3JkZXIuaW5kZXhPZihyKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYG9iamAgbXVzdCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlIG9yIGlmIGJ5LXZhbHVlIGlzIGFjY2VwdGFibGUuIEZvciBleGFtcGxlLFxuICogb2JqZWN0cyB3aXRoIG1ldGhvZHMsIG9yIGR5bmFtaWMgZ2V0dGVycyAob3Igc2V0dGVycykgc2hvdWxkIGJlIHBhc3NlZCBieS1yZWZlcmVuY2UgYXMgYSBtYXR0ZXJcbiAqIG9mIHNlY3VyaXR5LiBUaGUgYmVoYXZpb3IgaW4gbm9uLUpTIHJ1bnRpbWVzIGNvdWxkIG90aGVyd2lzZSBkaWZmZXIgZnJvbSB0aGF0IGluIHB1cmUgSlMgKGlmXG4gKiBnZXR0ZXJzIGFyZSBub3Qgc3RhYmxlLCBldGMuLi4pLlxuICpcbiAqIEBwYXJhbSBvYmogdGhlIG9iamVjdCB0byBiZSB0ZXN0ZWQuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgb2JqYCBtdXN0IGJlIHBhc3NlZCBieS1yZWZlcmVuY2UuXG4gKi9cbmZ1bmN0aW9uIGlzQnlSZWZlcmVuY2VPbmx5KG9iajogYW55KTogYm9vbGVhbiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgY3VyciA9IG9iajtcbiAgLy8gQ3Jhd2wgdXAgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBsb29rIGZvciBkeW5hbWljIHByb3BlcnRpZXMgb3IgbWV0aG9kcy5cbiAgZG8ge1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyKSkge1xuICAgICAgY29uc3QgZGVzY3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN1cnIsIHByb3ApO1xuICAgICAgaWYgKFxuICAgICAgICBkZXNjcj8uZ2V0ICE9IG51bGwgfHxcbiAgICAgICAgZGVzY3I/LnNldCAhPSBudWxsIHx8XG4gICAgICAgIHR5cGVvZiBkZXNjcj8udmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICAvLyBQcm9wZXJ0eSBoYXMgYSBkeW5hbWljIGdldHRlciwgc2V0dGVyIG9yIGlzIGEgY29uc3RydWN0b3IvbWV0aG9kLCBzbyBieS1yZWYgcmVxdWlyZWQhXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbmQgd2hlbiB0aGUgcGFyZW50IHByb3RvIGlzIGBPYmplY3RgLCB3aGljaCBoYXMgbm8gcGFyZW50IHByb3RvIGl0c2VsZi5cbiAgfSB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKChjdXJyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnIpKSkgIT0gbnVsbCk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
712
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRzs7O0FBRUgsbUNBQW1DO0FBRW5DLCtCQWFlO0FBQ2YsdUNBQXNFO0FBRXRFLHdCQUF3QjtBQW9CeEI7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUU1QixRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQTBDakQsUUFBQSxXQUFXLEdBQWdDO0lBQ3RELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzFCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzVCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7S0FDRjtJQUVELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7WUFDNUIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZE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TUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxHQUFHLEtBQUksSUFBSTtnQkFDbEIsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsR0FBRyxLQUFJLElBQUk7Z0JBQ2xCLFFBQU8sS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssQ0FBQSxLQUFLLFVBQVUsRUFDbEM7Z0JBQ0Esd0ZBQXdGO2dCQUN4RixPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCwyRUFBMkU7S0FDNUUsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtJQUU5RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhhbmRsaW5nIG9mIHR5cGVzIGluIEpTSUlcbiAqXG4gKiBUeXBlcyB3aWxsIGJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSkFWQVNDUklQVCBUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgdW5kZWZpbmVkL251bGwg4pSCICAgZGF0ZSAgICDilIIgc2NhbGFyICgqKSDilIIgICAgIGFycmF5ICAgICDilIIgSlNJSS1jbGFzcyBvYmplY3Qg4pSCIGxpdGVyYWwgb2JqZWN0ICDilIJcbiAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICog4pSCIERFQ0xBUkVEIOKUgiB2b2lkICAgICAgIOKUgiB1bmRlZmluZWQgICAgICDilIIgdW5kZWZpbmVkIOKUgiB1bmRlZmluZWQgIOKUgiB1bmRlZmluZWQgICAgIOKUgiB1bmRlZmluZWQgICAgICAgICDilIIgdW5kZWZpbmVkICAgICAgIOKUglxuICog4pSCIFRZUEUgICAgIOKUgiBkYXRlICAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiB7IGRhdGUgfSAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIHNjYWxhciAoKikg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgdmFsdWUgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIganNvbiAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHN0cmluZyAgICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihqc29uKSDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihqc29uKSDilIJcbiAqIOKUgiAgICAgICAgICDilIIgZW51bSAgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiB7IGVudW0gfSAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBhcnJheSBvZiBUIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIGFycmF5L1IoVCkgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIG1hcCBvZiBUICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihUKSAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgaW50ZXJmYWNlICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiB7IHJlZiB9ICAgICAgICAgICDilIIgeyByZWY6IHByb3h5IH0gIOKUglxuICog4pSCICAgICAgICAgIOKUgiBzdHJ1Y3QgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoVFtrXSkg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGNsYXNzICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIHsgcmVmOiBwcm94eSB9ICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgYW55ICAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHsgZGF0ZSB9ICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihhbnkpICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihhbnkpICDilIJcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICpcbiAqICAtICgqKSBzY2FsYXIgbWVhbnMgJ3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4nXG4gKiAgLSAo4oCgKSB0aHJvdyBpZiBub3QgbnVsbGFibGVcbiAqICAtIC9SKHQpIHJlY3Vyc2Ugd2l0aCBkZWNsYXJlZCB0eXBlIHRcbiAqL1xuXG5pbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQge1xuICBpc09ialJlZixcbiAgaXNXaXJlRGF0ZSxcbiAgaXNXaXJlRW51bSxcbiAgaXNXaXJlTWFwLFxuICBPYmpSZWYsXG4gIFRPS0VOX0RBVEUsXG4gIFRPS0VOX0VOVU0sXG4gIFRPS0VOX01BUCxcbiAgV2lyZURhdGUsXG4gIFdpcmVFbnVtLFxuICBpc1dpcmVTdHJ1Y3QsXG4gIFRPS0VOX1NUUlVDVCxcbn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsganNpaVR5cGVGcW4sIG9iamVjdFJlZmVyZW5jZSwgT2JqZWN0VGFibGUgfSBmcm9tICcuL29iamVjdHMnO1xuXG5pbXBvcnQgeyBhcGkgfSBmcm9tICcuJztcblxuLyoqXG4gKiBBIHNwZWNpZmljIHNpbmdsZXRvbiB0eXBlIHRvIGJlIGV4cGxpY2l0IGFib3V0IGEgVm9pZCB0eXBlXG4gKlxuICogSW4gdGhlIHNwZWMsICd2b2lkJyBpcyByZXByZXNlbnRlZCBhcyAndW5kZWZpbmVkJygqKSwgYnV0IGFsbG93aW5nIHRoZVxuICogdmFsdWUgJ3VuZGVmaW5lZCcgaW4gZnVuY3Rpb24gY2FsbHMgaGFzIGxlYWQgdG8gY29uc3VtZXJzIGZhaWxpbmcgdG8gcGFzc1xuICogdHlwZSBpbmZvcm1hdGlvbiB0aGF0IHRoZXkgaGFkLCBqdXN0IGJlY2F1c2UgdGhleSBkaWRuJ3QgXCJoYXZlIHRvXCIgKHRoZVxuICogcGFyYW1ldGVyIHdhcyBvcHRpb25hbCkuXG4gKlxuICogKCopIEFzIGluLCBkZWNsYXJhdGlvbiBvZiBhIG1ldGhvZCBsb29rcyBsaWtlIHsgcmV0dXJucz86IFR5cGVSZWZlcmVuY2UgfVxuICogYW5kIHRoZSBhYnNlbmNlIG9mIGEgdHlwZSBtZWFucyBpdCByZXR1cm5zICd2b2lkJy5cbiAqL1xuZXhwb3J0IHR5cGUgVm9pZCA9ICd2b2lkJztcblxuLyoqXG4gKiBBIHR5cGUgaW5zdGFuY2UsIG9yIFZvaWRcbiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uYWxWYWx1ZU9yVm9pZCA9IHNwZWMuT3B0aW9uYWxWYWx1ZSB8IFZvaWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsIEZRTiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbXB0eSBqYXZhc2NyaXB0IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkpFQ1RfRlFOID0gJ09iamVjdCc7XG5cbmV4cG9ydCBjb25zdCBTWU1CT0xfV0lSRV9UWVBFID0gU3ltYm9sLmZvcignJGpzaWkkd2lyZVR5cGUkJyk7XG5cbi8qKlxuICogVGhlIHR5cGUga2luZCwgdGhhdCBjb250cm9scyBob3cgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYWJvdmUgdGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2VyaWFsaXphdGlvbkNsYXNzIHtcbiAgVm9pZCA9ICdWb2lkJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgU2NhbGFyID0gJ1NjYWxhcicsXG4gIEpzb24gPSAnSnNvbicsXG4gIEVudW0gPSAnRW51bScsXG4gIEFycmF5ID0gJ0FycmF5JyxcbiAgTWFwID0gJ01hcCcsXG4gIFN0cnVjdCA9ICdTdHJ1Y3QnLFxuICBSZWZlcmVuY2VUeXBlID0gJ1JlZlR5cGUnLFxuICBBbnkgPSAnQW55Jyxcbn1cblxudHlwZSBUeXBlTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IHNwZWMuVHlwZTtcbnR5cGUgU3ltYm9sTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVySG9zdCB7XG4gIHJlYWRvbmx5IG9iamVjdHM6IE9iamVjdFRhYmxlO1xuICBkZWJ1ZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gIGxvb2t1cFR5cGUoZnFuOiBzdHJpbmcpOiBzcGVjLlR5cGU7XG4gIHJlY3Vyc2UoeDogYW55LCB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkKTogYW55O1xuICBmaW5kU3ltYm9sKGZxbjogc3BlYy5GUU4pOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZXJpYWxpemVyIHtcbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gICAgaG9zdDogU2VyaWFsaXplckhvc3QsXG4gICk6IGFueTtcbiAgZGVzZXJpYWxpemUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgICBob3N0OiBTZXJpYWxpemVySG9zdCxcbiAgKTogYW55O1xufVxuXG5leHBvcnQgY29uc3QgU0VSSUFMSVpFUlM6IHsgW2s6IHN0cmluZ106IFNlcmlhbGl6ZXIgfSA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLlZvaWRdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnRXhwZWN0ZWQgdm9pZCwgZ290JywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIF90eXBlLCBob3N0KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBob3N0LmRlYnVnKCdFeHBlY3RlZCB2b2lkLCBnb3QnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkRhdGVdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKTogV2lyZURhdGUgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIERhdGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNXaXJlRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBEYXRlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXJdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBwcmltaXRpdmVUeXBlLnByaW1pdGl2ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSAoJHt0eXBlb2YgdmFsdWV9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHByaW1pdGl2ZVR5cGUucHJpbWl0aXZlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9ICgke3R5cGVvZiB2YWx1ZX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkpzb25dOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICAvLyBKdXN0IHdoYXRldmVyLiBEYXRlcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VyaWFsaXplIHRoZW1zZWx2ZXMgdG8gc3RyaW5ncy5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICAvLyAvIVxcIFRvcC1sZXZlbCBcIm51bGxcIiB3aWxsIHR1cm4gdG8gdW5kZWZpbmVkLCBidXQgYW55IG51bGwgbmVzdGVkIGluIHRoZSB2YWx1ZSBpcyB2YWxpZCBKU09OLCBzbyBpdCdsbCBzdGF5IVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQSBtYXBwaW5nIG9iamVjdCBjYW4gYXJyaXZlIHRob3VnaCBoZXJlLiBUaGlzIHdvdWxkIGJlIHRoZSBjYXNlIGlmIGFueXRoaW5nIHRoYXQgaXMgdmFsaWQgaW50byBhIE1hcDxzdHJpbmcsID8+XG4gICAgICAvLyBpcyBwYXNzZWQgaW50byBhIEpTT04gdHJhbnNmZXIgcG9pbnQuIEluZGVlZCwgdGhvc2UgYXJlIGFsc28gdmFsaWQgSlNPTiEgRm9yIGV4YW1wbGUsIFB5dGhvbiBcImRpY3RzXCIgd2lsbCBiZVxuICAgICAgLy8gc2VyaWFsaXplZCAoYnkgdGhlIFB5dGhvbiBydW50aW1lKSBhcyBhICRqc2lpLm1hcCAodGhlIG1hcHBpbmcgb2JqZWN0KS4gV2UgbmVlZCB0byBkZS1zZXJpYWxpemUgdGhhdCBhcyBhXG4gICAgICAvLyBNYXA8c3RyaW5nLCBKU09OPiBpbiBvcmRlciB0byBvYnRhaW4gdGhlIGNvcnJlY3Qgb3V0cHV0IGJlaGF2aW9yIGhlcmUhXG4gICAgICBpZiAoaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAobWFwSnNvblZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgbWFwSnNvblZhbHVlKTtcblxuICAgICAgZnVuY3Rpb24gbWFwSnNvblZhbHVlKHRvTWFwOiBhbnkpIHtcbiAgICAgICAgaWYgKHRvTWFwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdG9NYXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh0b01hcCwge1xuICAgICAgICAgIHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5FbnVtXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IFdpcmVFbnVtIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBob3N0LmRlYnVnKCdTZXJpYWxpemluZyBlbnVtJyk7XG5cbiAgICAgIGNvbnN0IGVudW1UeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgY29uc3QgZW51bU1hcCA9IGhvc3QuZmluZFN5bWJvbChlbnVtVHlwZS5mcW4pO1xuICAgICAgY29uc3QgZW51bUVudHJ5ID0gT2JqZWN0LmVudHJpZXMoZW51bU1hcCkuZmluZCgoWywgdl0pID0+IHYgPT09IHZhbHVlKTtcbiAgICAgIGlmICghZW51bUVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW50cnkgaW4gJHtlbnVtVHlwZS5mcW59IGhhcyB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgW1RPS0VOX0VOVU1dOiBgJHtlbnVtVHlwZS5mcW59LyR7ZW51bUVudHJ5WzBdfWAgfTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzV2lyZUVudW0odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtUT0tFTl9NQVBdOiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmICghaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICAvLyBDb21wYXRpYmlsaXR5IG1vZGUgd2l0aCBvbGRlciB2ZXJzaW9ucyB0aGF0IGRpZG4ndCB3cmFwIGluIFtUT0tFTl9NQVBdXG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcFZhbHVlcyh2YWx1ZVtUT0tFTl9NQVBdLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogbWFwVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIFNZTUJPTF9XSVJFX1RZUEUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBUT0tFTl9NQVAsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICBUaGlzIGlzIHdoYXQgd2UnZCBsaWtlIHRvIGRvLCBidXQgd2UgY2FuJ3QgYmVjYXVzZSBhdCBsZWFzdCB0aGUgSmF2YSBjbGllbnRcbiAgICAgICAgZG9lcyBub3QgdW5kZXJzdGFuZCBieS12YWx1ZSBzZXJpYWxpemVkIGludGVyZmFjZSB0eXBlcywgc28gd2UnbGwgaGF2ZSB0b1xuICAgICAgICBzZXJpYWxpemUgYnktcmVmZXJlbmNlLiBBZGRpdGlvbmFsbHksIHNlcmlhbGl6aW5nIGtub3duIHByb3BlcnRpZXMgd291bGRcbiAgICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB0aGUgcmV0dXJuIHR5cGUgb2YgYSBtZXRob2QgaXMgYSBVTklPTiBvZiBzdHJ1Y3RzLlxuICAgICAgICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvNDAwXG5cbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc09mKG5hbWVkVHlwZSk7XG5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gLy8gRG9uJ3QgbWFwIGlmIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh2LCBwcm9wc1trZXldLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICAqL1xuXG4gICAgICBob3N0LmRlYnVnKCdSZXR1cm5pbmcgdmFsdWUgdHlwZSBieSByZWZlcmVuY2UnKTtcbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIEVNUFRZX09CSkVDVF9GUU4sIFtcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUgPz8ge30pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUcmVhdCBlbXB0eSBzdHJ1Y3RzIGFzIGB1bmRlZmluZWRgIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy80MTEpXG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgcHJvcHMgPSBwcm9wZXJ0aWVzT2YobmFtZWRUeXBlLCBob3N0Lmxvb2t1cFR5cGUpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgYW4gYXJyYXkgd2hlcmUgYSAke25hbWVkVHlwZS5mcW59IHdhcyBleHBlY3RlZC4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzP2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbWlsYXJseSB0byBzZXJpYWxpemF0aW9uLCB3ZSBtaWdodCBiZSBnZXR0aW5nIGEgcmVmZXJlbmNlIHR5cGUgd2hlcmUgd2UncmVcbiAgICAgIC8vIGV4cGVjdGluZyBhIHZhbHVlIHR5cGUuIEFjY2VwdCB0aGlzIGZvciBub3cgKGJ1dCBhbHNvIHZhbGlkYXRlIHRoYXQgb2JqZWN0XG4gICAgICAvLyBmb3IgcHJlc2VuY2Ugb2YgdGhlIHJpZ2h0IHByb3BlcnRpZXMpLlxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKFxuICAgICAgICAgICdFeHBlY3RlZCB2YWx1ZSB0eXBlIGJ1dCBnb3QgcmVmZXJlbmNlIHR5cGUsIGFjY2VwdGluZyBmb3Igbm93IChhd3NsYWJzL2pzaWkjNDAwKScsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHNhbWUgSU5TVEFOQ0UgKHNob3VsZG4ndCBtYXR0ZXIgYnV0IHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2Vzbid0KVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICAgICAgICAgIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZSxcbiAgICAgICAgICBuYW1lZFR5cGUuZnFuLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBpLmlzV2lyZVN0cnVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBmcW4sIGRhdGEgfSA9IHZhbHVlW2FwaS5UT0tFTl9TVFJVQ1RdO1xuICAgICAgICBpZiAoIWlzQXNzaWduYWJsZShmcW4sIG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXaXJlIHN0cnVjdCB0eXBlICcke2Zxbn0nIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICcke25hbWVkVHlwZS5mcW59J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFB5dGhvbiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2luZyBwbGFpbiBtYXBwaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBTdHJ1Y3RzIChkeWFubWljIHR5cGluZywgWU9MTyEpXG4gICAgICBpZiAoYXBpLmlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVthcGkuVE9LRU5fTUFQXTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSB2YWxpZGF0ZVJlcXVpcmVkUHJvcHModmFsdWUgYXMgYW55LCBuYW1lZFR5cGUuZnFuLCBwcm9wcyk7XG5cbiAgICAgIC8vIFJldHVybiBhIGRpY3QgQ09QWSwgd2UgaGF2ZSBieS12YWx1ZSBzZW1hbnRpY3MgYW55d2F5LlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IE9ialJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIG9iamVjdCByZWZlcmVuY2UsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUoXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnRlcmZhY2VzID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoZXhwZWN0ZWRUeXBlKVxuICAgICAgICA/IFtleHBlY3RlZFR5cGUuZnFuXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChzcGVjLmlzQ2xhc3NUeXBlKGV4cGVjdGVkVHlwZSkgPyBleHBlY3RlZFR5cGUuZnFuIDogRU1QVFlfT0JKRUNUX0ZRTik7XG5cbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlLCBpbnRlcmZhY2VzKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHBhc3MgYSBieS1yZWYgb2JqZWN0IGlzIHRvIGhhdmUgY3JlYXRlZCBpdFxuICAgICAgLy8gcHJldmlvdXNseSBpbnNpZGUgSlNJSSBrZXJuZWwsIHNvIGl0IG11c3QgaGF2ZSBhbiBvYmpyZWYgYWxyZWFkeS5cblxuICAgICAgaWYgKCFpc09ialJlZih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuIH0gPSBob3N0Lm9iamVjdHMuZmluZE9iamVjdCh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IG5hbWVkVHlwZVJlZiA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmIChuYW1lZFR5cGVSZWYuZnFuICE9PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnN0IG5hbWVkVHlwZSA9IGhvc3QubG9va3VwVHlwZShuYW1lZFR5cGVSZWYuZnFuKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3Qgd2UgZ290IGlzIG9mIHRoZSByaWdodCB0eXBlXG4gICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgY2xhc3Nlcywgbm90IGludGVyZmFjZXMsIHNpbmNlIEphdmEgbWlnaHQgcGFzcyB1cyBvYmplY3RzIHRoYXRcbiAgICAgICAgLy8gcHJpdmF0ZWx5IGltcGxlbWVudCBzb21lIGludGVyZmFjZSBhbmQgd2UgY2FuJ3QgcHJvdmUgdGhleSBkb24ndC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy8zOTlcbiAgICAgICAgY29uc3QgZGVjbGFyZWRUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlYy5pc0NsYXNzVHlwZShuYW1lZFR5cGUpICYmXG4gICAgICAgICAgIWlzQXNzaWduYWJsZShmcW4sIGRlY2xhcmVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgT2JqZWN0IG9mIHR5cGUgJHtmcW59IGlzIG5vdCBjb252ZXJ0aWJsZSB0byAke2RlY2xhcmVkVHlwZS5mcW59YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5BbnldOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZSkgPT4gaG9zdC5yZWN1cnNlKGUsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogbm8gY2FzZSBmb3IgXCJFTlVNXCIgaGVyZSwgd2l0aG91dCB0eXBlIGRlY2xhcmF0aW9uIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2VcbiAgICAgIC8vIGJldHdlZW4gYW4gZW51bSBtZW1iZXIgYW5kIGEgc2NhbGFyLlxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSlNJSSBLZXJuZWwgaXMgdW5hYmxlIHRvIHNlcmlhbGl6ZSBgZnVuY3Rpb25gLiBBbiBpbnN0YW5jZSB3aXRoIG1ldGhvZHMgbWlnaHQgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGFuIGBhbnlgIG1ldGhvZD8nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSlNJSSBrZXJuZWwgYXNzdW1wdGlvbiB2aW9sYXRlZCwgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICl9IGlzIG5vdCBhbiBvYmplY3RgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIFNZTUJPTF9XSVJFX1RZUEUgaW4gdmFsdWUgJiZcbiAgICAgICAgKHZhbHVlIGFzIGFueSlbU1lNQk9MX1dJUkVfVFlQRV0gPT09IFRPS0VOX01BUFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXS5zZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUbyBtYWtlIHN1cmUgcGVvcGxlIGFyZW4ndCBnb2luZyB0byB0cnkgYW5kIHJldHVybiBNYXA8PiBvciBTZXQ8PiBvdXQsIHRlc3QgZm9yXG4gICAgICAvLyB0aG9zZSBhbmQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlLiBXZSBjYW4ndCBkZXRlY3QgdGhlc2UgY2FzZXMgYW55IG90aGVyXG4gICAgICAvLyB3YXksIGFuZCB0aGUgYnktdmFsdWUgc2VyaWFsaXplZCBvYmplY3Qgd2lsbCBiZSBxdWl0ZSB1c2VsZXNzLlxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0IHx8IHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJldHVybiBvYmplY3RzIG9mIHR5cGUgU2V0IG9yIE1hcFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGEgcHJldmlvdXMgcmVmZXJlbmNlIHRvIG1haW50YWluIG9iamVjdCBpZGVudGl0eS4gTk9URTogdGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuXG4gICAgICAvLyBhIGRpZmZlcmVudCB0eXBlIHRoYW4gcmVxdWVzdGVkISBUaGlzIGlzIGp1c3QgaG93IGl0IGlzIHJpZ2h0IG5vdy5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICBjb25zdCBwcmV2UmVmID0gb2JqZWN0UmVmZXJlbmNlKHZhbHVlKTtcbiAgICAgIGlmIChwcmV2UmVmKSB7XG4gICAgICAgIHJldHVybiBwcmV2UmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIG9yIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0eXBlLCBwYXNzIG9yIG1ha2UgdGhlIHJlZmVyZW5jZVxuICAgICAgLy8gKExpa2UgcmVndWxhciByZWZ0eXBlIHNlcmlhbGl6YXRpb24sIGJ1dCB3aXRob3V0IHRoZSB0eXBlIGRlcml2YXRpb24gdG8gYW4gaW50ZXJmYWNlKVxuICAgICAgY29uc3QganNpaVR5cGUgPVxuICAgICAgICBqc2lpVHlwZUZxbih2YWx1ZSkgPz9cbiAgICAgICAgKGlzQnlSZWZlcmVuY2VPbmx5KHZhbHVlKSA/IEVNUFRZX09CSkVDVF9GUU4gOiB1bmRlZmluZWQpO1xuICAgICAgaWYgKGpzaWlUeXBlKSB7XG4gICAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvZiBhbiBleHBvcnRlZCB0eXBlLiBFaXRoZXIgYW4gb2JqZWN0XG4gICAgICAvLyBsaXRlcmFsLCBvciBhbiBpbnN0YW5jZSBvZiBhIGZ1bGx5IHByaXZhdGUgY2xhc3MgKGNhbm5vdCBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcykuXG5cbiAgICAgIC8vIFdlIHdpbGwgc2VyaWFsaXplIGJ5LXZhbHVlLCBidXQgcmVjdXJzZSBmb3Igc2VyaWFsaXphdGlvbiBzbyB0aGF0IGlmXG4gICAgICAvLyB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZSBvYmplY3RzLCB0aGV5IHdpbGwgYmUgc2VyaWFsaXplZCBhcHByb3ByaWF0ZWx5LlxuICAgICAgLy8gKEJhc2ljYWxseSwgc2VyaWFsaXplIGFueXRoaW5nIGVsc2UgYXMgYSBtYXAgb2YgJ2FueScpLlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzV2lyZURhdGUodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIERhdGUnKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFNjYWxhcicpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEFycmF5Jyk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVFbnVtKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYW4gRW51bScpO1xuICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgICAgfVxuICAgICAgaWYgKGlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICAgIGNvbnN0IG1hcE9mQW55OiBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlID0ge1xuICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgeyB0eXBlOiBtYXBPZkFueSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFJlZicpO1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdmFsdWUgaGFzIGEgc3RydWN0IHRva2VuLCBpdCB3YXMgc2VyaWFsaXplZCBieSBhIHR5cGVkIGpzaWlcbiAgICAgIC8vIHN0cnVjdCwgYnV0IHNpbmNlIHRoZSBkZXNlcmlhbGl6YXRpb24gdGFyZ2V0IGlzIEFOWSwgYWxsIHdlIGNhbiBkbyBpc1xuICAgICAgLy8gc3RyaXAgdGhlIGRhdGEgZnJvbSAkanNpaS5zdHJ1Y3QgYW5kIGNvbnRpbnVlIHRvIGRlc2VyaWFsaXplIGFzIEFOWS5cbiAgICAgIGlmIChpc1dpcmVTdHJ1Y3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgZnFuLCBkYXRhIH0gPSB2YWx1ZVtUT0tFTl9TVFJVQ1RdO1xuICAgICAgICBob3N0LmRlYnVnKGBBTlkgaXMgYSBzdHJ1Y3Qgb2YgdHlwZSAke2Zxbn1gKTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgeyB0eXBlOiB7IGZxbiB9IH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCBhZ2FpbiwgZGVzZXJpYWxpemUgYnktdmFsdWUuXG4gICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBNYXAnKTtcbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlKHZhbHVlOiBEYXRlKTogV2lyZURhdGUge1xuICByZXR1cm4geyBbVE9LRU5fREFURV06IHZhbHVlLnRvSVNPU3RyaW5nKCkgfTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVEYXRlKHZhbHVlOiBXaXJlRGF0ZSk6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUodmFsdWVbVE9LRU5fREFURV0pO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZUVudW0odmFsdWU6IFdpcmVFbnVtLCBsb29rdXA6IFN5bWJvbExvb2t1cCkge1xuICBjb25zdCBlbnVtTG9jYXRvciA9IHZhbHVlW1RPS0VOX0VOVU1dO1xuICBjb25zdCBzZXAgPSBlbnVtTG9jYXRvci5sYXN0SW5kZXhPZignLycpO1xuICBpZiAoc2VwID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGVudW0gdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSBlbnVtTG9jYXRvci5zbGljZSgwLCBzZXApO1xuICBjb25zdCB2YWx1ZU5hbWUgPSBlbnVtTG9jYXRvci5zbGljZShzZXAgKyAxKTtcblxuICBjb25zdCBlbnVtVmFsdWUgPSBsb29rdXAodHlwZU5hbWUpW3ZhbHVlTmFtZV07XG4gIGlmIChlbnVtVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW51bSBtZW1iZXIgbmFtZWQgJHt2YWx1ZU5hbWV9IGluICR7dHlwZU5hbWV9YCk7XG4gIH1cbiAgcmV0dXJuIGVudW1WYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlU2VyaWFsaXphdGlvbiB7XG4gIHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzO1xuICB0eXBlUmVmOiBPcHRpb25hbFZhbHVlT3JWb2lkO1xufVxuXG4vKipcbiAqIEZyb20gYSB0eXBlIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBwb3NzaWJsZSBzZXJpYWxpemF0aW9uIHR5cGVzXG4gKlxuICogVGhlcmUgY2FuIGJlIG11bHRpcGxlLCBiZWNhdXNlIHRoZSB0eXBlIGNhbiBiZSBhIHR5cGUgdW5pb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemF0aW9uVHlwZShcbiAgdHlwZVJlZjogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogVHlwZVNlcmlhbGl6YXRpb25bXSB7XG4gIGlmICh0eXBlUmVmID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXJuZWwgZXJyb3I6IGV4cGVjdGVkIHR5cGUgaW5mb3JtYXRpb24sIGdvdCAndW5kZWZpbmVkJ1wiKTtcbiAgfVxuICBpZiAodHlwZVJlZiA9PT0gJ3ZvaWQnKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlZvaWQsIHR5cGVSZWYgfV07XG4gIH1cbiAgaWYgKHNwZWMuaXNQcmltaXRpdmVUeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICBzd2l0Y2ggKHR5cGVSZWYudHlwZS5wcmltaXRpdmUpIHtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkFueTpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkFueSwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkRhdGU6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5EYXRlLCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbjpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkpzb24sIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Cb29sZWFuOlxuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuTnVtYmVyOlxuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuU3RyaW5nOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyLCB0eXBlUmVmIH1dO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltaXRpdmUgdHlwZScpO1xuICB9XG4gIGlmIChzcGVjLmlzQ29sbGVjdGlvblR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHNlcmlhbGl6YXRpb25DbGFzczpcbiAgICAgICAgICB0eXBlUmVmLnR5cGUuY29sbGVjdGlvbi5raW5kID09PSBzcGVjLkNvbGxlY3Rpb25LaW5kLkFycmF5XG4gICAgICAgICAgICA/IFNlcmlhbGl6YXRpb25DbGFzcy5BcnJheVxuICAgICAgICAgICAgOiBTZXJpYWxpemF0aW9uQ2xhc3MuTWFwLFxuICAgICAgICB0eXBlUmVmLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGlmIChzcGVjLmlzVW5pb25UeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICBjb25zdCBjb21wb3VuZFR5cGVzID0gZmxhdE1hcCh0eXBlUmVmLnR5cGUudW5pb24udHlwZXMsICh0KSA9PlxuICAgICAgc2VyaWFsaXphdGlvblR5cGUoeyB0eXBlOiB0IH0sIGxvb2t1cCksXG4gICAgKTtcbiAgICAvLyBQcm9wYWdhdGUgdGhlIHRvcC1sZXZlbCAnb3B0aW9uYWwnIGZpZWxkIHRvIGVhY2ggaW5kaXZpZHVhbCBzdWJ0eXBlXG4gICAgZm9yIChjb25zdCB0IG9mIGNvbXBvdW5kVHlwZXMpIHtcbiAgICAgIGlmICh0LnR5cGVSZWYgIT09ICd2b2lkJykge1xuICAgICAgICB0LnR5cGVSZWYub3B0aW9uYWwgPSB0eXBlUmVmLm9wdGlvbmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tcG91bmRUeXBlcy5zb3J0KChsLCByKSA9PlxuICAgICAgY29tcGFyZVNlcmlhbGl6YXRpb25DbGFzc2VzKGwuc2VyaWFsaXphdGlvbkNsYXNzLCByLnNlcmlhbGl6YXRpb25DbGFzcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBuZXh0IHBhcnQgb2YgdGhlIGNvbnZlcnNpb24gaXMgbG9va3VwLWRlcGVuZGVudFxuICBjb25zdCB0eXBlID0gbG9va3VwKHR5cGVSZWYudHlwZS5mcW4pO1xuXG4gIGlmIChzcGVjLmlzRW51bVR5cGUodHlwZSkpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuRW51bSwgdHlwZVJlZiB9XTtcbiAgfVxuXG4gIGlmIChzcGVjLmlzSW50ZXJmYWNlVHlwZSh0eXBlKSAmJiB0eXBlLmRhdGF0eXBlKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdCwgdHlwZVJlZiB9XTtcbiAgfVxuXG4gIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlLCB0eXBlUmVmIH1dO1xufVxuXG5mdW5jdGlvbiBudWxsQW5kT2soeDogdW5rbm93biwgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGJvb2xlYW4ge1xuICBpZiAoeCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGUgIT09ICd2b2lkJyAmJiAhdHlwZS5vcHRpb25hbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBHb3QgJ3VuZGVmaW5lZCcgZm9yIG5vbi1vcHRpb25hbCBpbnN0YW5jZSBvZiAke0pTT04uc3RyaW5naWZ5KHR5cGUpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeDogdW5rbm93bik6IHggaXMgRGF0ZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09ICdvYmplY3QnICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBEYXRlXSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNTY2FsYXIoeDogdW5rbm93bik6IHggaXMgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXA8VCwgVT4oeHM6IFRbXSwgZm46ICh4OiBUKSA9PiBVW10pOiBVW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8VT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0LnB1c2goLi4uZm4oeCkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogTWFwIGFuIG9iamVjdCdzIHZhbHVlcywgc2tpcHBpbmcgJ3VuZGVmaW5lZCcgdmFsdWVzJ1xuICovXG5mdW5jdGlvbiBtYXBWYWx1ZXMoXG4gIHZhbHVlOiB1bmtub3duLFxuICBmbjogKHZhbHVlOiBhbnksIGZpZWxkOiBzdHJpbmcpID0+IGFueSxcbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvYmplY3QgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3Qgb3V0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIGNvbnN0IHdpcmVWYWx1ZSA9IGZuKHYsIGspO1xuICAgIGlmICh3aXJlVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dFtrXSA9IHdpcmVWYWx1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0aWVzT2YoXG4gIHQ6IHNwZWMuVHlwZSxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogeyBbbmFtZTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9IHtcbiAgaWYgKCFzcGVjLmlzQ2xhc3NPckludGVyZmFjZVR5cGUodCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgcmV0OiB7IFtuYW1lOiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0gPSB7fTtcblxuICBpZiAodC5pbnRlcmZhY2VzKSB7XG4gICAgZm9yIChjb25zdCBpZmFjZSBvZiB0LmludGVyZmFjZXMpIHtcbiAgICAgIHJldCA9IHsgLi4ucmV0LCAuLi5wcm9wZXJ0aWVzT2YobG9va3VwKGlmYWNlKSwgbG9va3VwKSB9O1xuICAgIH1cbiAgfVxuICBpZiAoc3BlYy5pc0NsYXNzVHlwZSh0KSAmJiB0LmJhc2UpIHtcbiAgICByZXQgPSB7IC4uLnJldCwgLi4ucHJvcGVydGllc09mKGxvb2t1cCh0LmJhc2UpLCBsb29rdXApIH07XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgdC5wcm9wZXJ0aWVzID8/IFtdKSB7XG4gICAgcmV0W3Byb3AubmFtZV0gPSBwcm9wO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgZ2l2ZW4gdHlwZSAoYnkgaXQncyBGUU4pIGNhbiBiZSBhc3NpZ25lZCB0byBhIG5hbWVkIHR5cGUgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSBhY3R1YWxUeXBlRnFuIHRoZSBGUU4gb2YgdGhlIHR5cGUgdGhhdCBpcyBiZWluZyB0ZXN0ZWQuXG4gKiBAcGFyYW0gcmVxdWlyZWRUeXBlICB0aGUgcmVxdWlyZWQgcmVmZXJlbmNlIHR5cGUuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgYHJlcXVpcmVkVHlwZWBgIGlzIGEgc3VwZXItdHlwZSAoYmFzZSBjbGFzcyBvciBpbXBsZW1lbnRlZCBpbnRlcmZhY2UpIG9mIHRoZSB0eXBlIGRlc2lnbmF0ZWQgYnlcbiAqICAgICAgICAgIGBgYWN0dWFsVHlwZUZxbmBgLlxuICovXG5mdW5jdGlvbiBpc0Fzc2lnbmFibGUoXG4gIGFjdHVhbFR5cGVGcW46IHN0cmluZyxcbiAgcmVxdWlyZWRUeXBlOiBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBlbXB0eSBvYmplY3QgaXMgYXNzaWduYWJsZSB0byBldmVyeXRoaW5nXG4gIGlmIChhY3R1YWxUeXBlRnFuID09PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAocmVxdWlyZWRUeXBlLmZxbiA9PT0gYWN0dWFsVHlwZUZxbikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGFjdHVhbFR5cGUgPSBsb29rdXAoYWN0dWFsVHlwZUZxbik7XG4gIGlmIChzcGVjLmlzQ2xhc3NUeXBlKGFjdHVhbFR5cGUpKSB7XG4gICAgaWYgKFxuICAgICAgYWN0dWFsVHlwZS5iYXNlICYmXG4gICAgICBpc0Fzc2lnbmFibGUoYWN0dWFsVHlwZS5iYXNlLCByZXF1aXJlZFR5cGUsIGxvb2t1cClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoc3BlYy5pc0NsYXNzT3JJbnRlcmZhY2VUeXBlKGFjdHVhbFR5cGUpICYmIGFjdHVhbFR5cGUuaW50ZXJmYWNlcykge1xuICAgIHJldHVybiAoXG4gICAgICBhY3R1YWxUeXBlLmludGVyZmFjZXMuZmluZCgoaWZhY2UpID0+XG4gICAgICAgIGlzQXNzaWduYWJsZShpZmFjZSwgcmVxdWlyZWRUeXBlLCBsb29rdXApLFxuICAgICAgKSAhPSBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVxdWlyZWRQcm9wcyhcbiAgYWN0dWFsUHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHNwZWNQcm9wczogeyBba2V5OiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0sXG4pIHtcbiAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXNcbiAgY29uc3QgbWlzc2luZ1JlcXVpcmVkUHJvcHMgPSBPYmplY3Qua2V5cyhzcGVjUHJvcHMpXG4gICAgLmZpbHRlcigobmFtZSkgPT4gIXNwZWNQcm9wc1tuYW1lXS5vcHRpb25hbClcbiAgICAuZmlsdGVyKChuYW1lKSA9PiAhKG5hbWUgaW4gYWN0dWFsUHJvcHMpKTtcblxuICBpZiAobWlzc2luZ1JlcXVpcmVkUHJvcHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXMgZm9yICR7dHlwZU5hbWV9OiAke21pc3NpbmdSZXF1aXJlZFByb3BzLmpvaW4oXG4gICAgICAgICcsICcsXG4gICAgICApfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQcm9wcztcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNlcmlhbGl6YXRpb25DbGFzc2VzKFxuICBsOiBTZXJpYWxpemF0aW9uQ2xhc3MsXG4gIHI6IFNlcmlhbGl6YXRpb25DbGFzcyxcbik6IG51bWJlciB7XG4gIGNvbnN0IG9yZGVyID0gW1xuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5Wb2lkLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5EYXRlLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXIsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkpzb24sXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkVudW0sXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5LFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5NYXAsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuQW55LFxuICBdO1xuICByZXR1cm4gb3JkZXIuaW5kZXhPZihsKSAtIG9yZGVyLmluZGV4T2Yocik7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGBvYmpgIG11c3QgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZSBvciBpZiBieS12YWx1ZSBpcyBhY2NlcHRhYmxlLiBGb3IgZXhhbXBsZSxcbiAqIG9iamVjdHMgd2l0aCBtZXRob2RzLCBvciBkeW5hbWljIGdldHRlcnMgKG9yIHNldHRlcnMpIHNob3VsZCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlIGFzIGEgbWF0dGVyXG4gKiBvZiBzZWN1cml0eS4gVGhlIGJlaGF2aW9yIGluIG5vbi1KUyBydW50aW1lcyBjb3VsZCBvdGhlcndpc2UgZGlmZmVyIGZyb20gdGhhdCBpbiBwdXJlIEpTIChpZlxuICogZ2V0dGVycyBhcmUgbm90IHN0YWJsZSwgZXRjLi4uKS5cbiAqXG4gKiBAcGFyYW0gb2JqIHRoZSBvYmplY3QgdG8gYmUgdGVzdGVkLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgYG9iamAgbXVzdCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0J5UmVmZXJlbmNlT25seShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGN1cnIgPSBvYmo7XG4gIC8vIENyYXdsIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4gdG8gbG9vayBmb3IgZHluYW1pYyBwcm9wZXJ0aWVzIG9yIG1ldGhvZHMuXG4gIGRvIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycikpIHtcbiAgICAgIGNvbnN0IGRlc2NyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdXJyLCBwcm9wKTtcbiAgICAgIGlmIChcbiAgICAgICAgZGVzY3I/LmdldCAhPSBudWxsIHx8XG4gICAgICAgIGRlc2NyPy5zZXQgIT0gbnVsbCB8fFxuICAgICAgICB0eXBlb2YgZGVzY3I/LnZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgLy8gUHJvcGVydHkgaGFzIGEgZHluYW1pYyBnZXR0ZXIsIHNldHRlciBvciBpcyBhIGNvbnN0cnVjdG9yL21ldGhvZCwgc28gYnktcmVmIHJlcXVpcmVkIVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRW5kIHdoZW4gdGhlIHBhcmVudCBwcm90byBpcyBgT2JqZWN0YCwgd2hpY2ggaGFzIG5vIHBhcmVudCBwcm90byBpdHNlbGYuXG4gIH0gd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZigoY3VyciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyKSkpICE9IG51bGwpO1xuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsii/kernel",
3
- "version": "1.54.0",
3
+ "version": "1.56.0",
4
4
  "description": "kernel for jsii execution environment",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -31,24 +31,24 @@
31
31
  "package": "package-js"
32
32
  },
33
33
  "dependencies": {
34
- "@jsii/spec": "^1.54.0",
34
+ "@jsii/spec": "^1.56.0",
35
35
  "fs-extra": "^9.1.0",
36
36
  "tar": "^6.1.11"
37
37
  },
38
38
  "devDependencies": {
39
- "@scope/jsii-calc-base": "^1.54.0",
40
- "@scope/jsii-calc-lib": "^1.54.0",
39
+ "@scope/jsii-calc-base": "^1.56.0",
40
+ "@scope/jsii-calc-lib": "^1.56.0",
41
41
  "@types/fs-extra": "^9.0.13",
42
- "@types/jest": "^27.4.0",
43
- "@types/node": "^12.20.43",
42
+ "@types/jest": "^27.4.1",
43
+ "@types/node": "^12.20.47",
44
44
  "@types/tar": "^6.1.1",
45
- "eslint": "^8.8.0",
45
+ "eslint": "^8.12.0",
46
46
  "jest": "^27.5.1",
47
47
  "jest-expect-message": "^1.0.2",
48
- "jsii-build-tools": "^1.54.0",
48
+ "jsii-build-tools": "^1.56.0",
49
49
  "jsii-calc": "^3.20.120",
50
- "prettier": "^2.5.1",
51
- "ts-jest": "^27.1.3",
50
+ "prettier": "^2.6.2",
51
+ "ts-jest": "^27.1.4",
52
52
  "typescript": "~3.9.10"
53
53
  }
54
54
  }