@angular/compiler-cli 11.2.9 → 11.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +4 -4
  3. package/ngcc/src/analysis/decoration_analyzer.js +6 -6
  4. package/ngcc/src/packages/build_marker.d.ts +1 -1
  5. package/ngcc/src/packages/build_marker.js +1 -1
  6. package/package.json +2 -2
  7. package/src/ngtsc/annotations/src/component.d.ts +2 -3
  8. package/src/ngtsc/annotations/src/component.js +4 -5
  9. package/src/ngtsc/annotations/src/directive.d.ts +3 -4
  10. package/src/ngtsc/annotations/src/directive.js +6 -7
  11. package/src/ngtsc/annotations/src/injectable.d.ts +1 -3
  12. package/src/ngtsc/annotations/src/injectable.js +9 -9
  13. package/src/ngtsc/annotations/src/metadata.d.ts +1 -2
  14. package/src/ngtsc/annotations/src/metadata.js +5 -5
  15. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -3
  16. package/src/ngtsc/annotations/src/ng_module.js +4 -5
  17. package/src/ngtsc/annotations/src/pipe.d.ts +1 -3
  18. package/src/ngtsc/annotations/src/pipe.js +4 -5
  19. package/src/ngtsc/annotations/src/util.d.ts +5 -5
  20. package/src/ngtsc/annotations/src/util.js +12 -11
  21. package/src/ngtsc/core/api/src/interfaces.d.ts +4 -1
  22. package/src/ngtsc/core/api/src/interfaces.js +1 -1
  23. package/src/ngtsc/core/src/compiler.js +9 -10
  24. package/src/ngtsc/core/src/host.d.ts +1 -1
  25. package/src/ngtsc/diagnostics/src/error_code.d.ts +5 -0
  26. package/src/ngtsc/diagnostics/src/error_code.js +6 -1
  27. package/src/ngtsc/imports/index.d.ts +1 -1
  28. package/src/ngtsc/imports/index.js +2 -3
  29. package/src/ngtsc/imports/src/default.d.ts +10 -37
  30. package/src/ngtsc/imports/src/default.js +22 -37
  31. package/src/ngtsc/incremental/src/state.js +6 -4
  32. package/src/ngtsc/resource/src/loader.js +3 -2
  33. package/src/ngtsc/transform/src/transform.d.ts +2 -2
  34. package/src/ngtsc/transform/src/transform.js +18 -16
  35. package/src/ngtsc/translator/index.d.ts +1 -1
  36. package/src/ngtsc/translator/index.js +1 -1
  37. package/src/ngtsc/translator/src/translator.d.ts +3 -3
  38. package/src/ngtsc/translator/src/translator.js +3 -3
  39. package/src/ngtsc/typecheck/api/checker.d.ts +1 -1
  40. package/src/ngtsc/typecheck/api/checker.js +1 -1
  41. package/src/ngtsc/typecheck/api/completion.d.ts +5 -0
  42. package/src/ngtsc/typecheck/api/completion.js +1 -1
  43. package/src/ngtsc/typecheck/src/checker.d.ts +2 -2
  44. package/src/ngtsc/typecheck/src/checker.js +3 -3
  45. package/src/ngtsc/typecheck/src/completion.d.ts +17 -7
  46. package/src/ngtsc/typecheck/src/completion.js +82 -47
  47. package/src/ngtsc/typecheck/src/context.js +26 -14
  48. package/src/ngtsc/typecheck/src/expression.js +4 -2
  49. package/src/ngtsc/typecheck/src/host.js +5 -7
  50. package/src/ngtsc/typecheck/src/tcb_util.d.ts +24 -2
  51. package/src/ngtsc/typecheck/src/tcb_util.js +40 -11
  52. package/src/ngtsc/typecheck/src/type_check_block.d.ts +28 -1
  53. package/src/ngtsc/typecheck/src/type_check_block.js +61 -25
  54. package/src/ngtsc/typecheck/src/type_check_file.d.ts +2 -1
  55. package/src/ngtsc/typecheck/src/type_check_file.js +3 -3
  56. package/src/ngtsc/typecheck/src/type_constructor.js +4 -8
  57. package/src/ngtsc/util/src/typescript.d.ts +4 -0
  58. package/src/ngtsc/util/src/typescript.js +13 -2
  59. package/src/transformers/program.js +70 -3
  60. package/src/version.js +1 -1
@@ -103,6 +103,11 @@
103
103
  * Raised when a directive/pipe is part of the declarations of two or more NgModules.
104
104
  */
105
105
  ErrorCode[ErrorCode["NGMODULE_DECLARATION_NOT_UNIQUE"] = 6007] = "NGMODULE_DECLARATION_NOT_UNIQUE";
106
+ /**
107
+ * Not actually raised by the compiler, but reserved for documentation of a View Engine error when
108
+ * a View Engine build depends on an Ivy-compiled NgModule.
109
+ */
110
+ ErrorCode[ErrorCode["NGMODULE_VE_DEPENDENCY_ON_IVY_LIB"] = 6999] = "NGMODULE_VE_DEPENDENCY_ON_IVY_LIB";
106
111
  /**
107
112
  * An element name failed validation against the DOM schema.
108
113
  */
@@ -198,4 +203,4 @@
198
203
  }
199
204
  exports.ngErrorCode = ngErrorCode;
200
205
  });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JfY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2Vycm9yX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7O09BRUc7SUFDSCxJQUFZLFNBa0xYO0lBbExELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQzs7O1dBR0c7UUFDSCxvSEFBK0MsQ0FBQTtRQUUvQzs7O1dBR0c7UUFDSCw0RkFBbUMsQ0FBQTtRQUVuQywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUMzQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1QiwwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRFQUEyQixDQUFBO1FBRTNCOztXQUVHO1FBQ0gsNEZBQW1DLENBQUE7UUFFbkM7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7V0FFRztRQUNILGtGQUE4QixDQUFBO1FBRTlCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOzs7V0FHRztRQUNILGdJQUFxRCxDQUFBO1FBRXJEOzs7V0FHRztRQUNILG9HQUF1QyxDQUFBO1FBRXZDOztXQUVHO1FBQ0gsa0dBQXNDLENBQUE7UUFFdEM7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOzs7Ozs7O1dBT0c7UUFDSCxnR0FBcUMsQ0FBQTtRQUVyQzs7O1dBR0c7UUFDSCwwRUFBMEIsQ0FBQTtRQUUxQjs7O1dBR0c7UUFDSCxzRkFBZ0MsQ0FBQTtRQUVoQzs7V0FFRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDLDRFQUE0RTtRQUM1RSxpR0FBaUc7UUFDakcsc0ZBQXNGO1FBRXRGOzs7V0FHRztRQUNILHFGQUFnQyxDQUFBO1FBRWhDOzs7O1dBSUc7UUFDSCx1R0FBeUMsQ0FBQTtJQUMzQyxDQUFDLEVBbExXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBa0xwQjtJQUVEOzs7OztPQUtHO0lBQ1UsUUFBQSwyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztJQUV2RTs7OztPQUlHO0lBQ1UsUUFBQSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUNqRCxTQUFTLENBQUMseUJBQXlCO1FBQ25DLFNBQVMsQ0FBQyxxQkFBcUI7UUFDL0IsU0FBUyxDQUFDLG1CQUFtQjtRQUM3QixTQUFTLENBQUMsc0JBQXNCO1FBQ2hDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLHdCQUF3QjtLQUNuQyxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFlO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRkQsa0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBlbnVtIEVycm9yQ29kZSB7XG4gIERFQ09SQVRPUl9BUkdfTk9UX0xJVEVSQUwgPSAxMDAxLFxuICBERUNPUkFUT1JfQVJJVFlfV1JPTkcgPSAxMDAyLFxuICBERUNPUkFUT1JfTk9UX0NBTExFRCA9IDEwMDMsXG4gIERFQ09SQVRPUl9PTl9BTk9OWU1PVVNfQ0xBU1MgPSAxMDA0LFxuICBERUNPUkFUT1JfVU5FWFBFQ1RFRCA9IDEwMDUsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgaW5jb21wYXRpYmxlIGRlY29yYXRvcnMgb24gYSB0eXBlIG9yIGEgY2xhc3MgZmllbGQuXG4gICAqL1xuICBERUNPUkFUT1JfQ09MTElTSU9OID0gMTAwNixcblxuICBWQUxVRV9IQVNfV1JPTkdfVFlQRSA9IDEwMTAsXG4gIFZBTFVFX05PVF9MSVRFUkFMID0gMTAxMSxcblxuICBDT01QT05FTlRfTUlTU0lOR19URU1QTEFURSA9IDIwMDEsXG4gIFBJUEVfTUlTU0lOR19OQU1FID0gMjAwMixcbiAgUEFSQU1fTUlTU0lOR19UT0tFTiA9IDIwMDMsXG4gIERJUkVDVElWRV9NSVNTSU5HX1NFTEVDVE9SID0gMjAwNCxcblxuICAvKiogUmFpc2VkIHdoZW4gYW4gdW5kZWNvcmF0ZWQgY2xhc3MgaXMgcGFzc2VkIGluIGFzIGEgcHJvdmlkZXIgdG8gYSBtb2R1bGUgb3IgYSBkaXJlY3RpdmUuICovXG4gIFVOREVDT1JBVEVEX1BST1ZJREVSID0gMjAwNSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBEaXJlY3RpdmUgaW5oZXJpdHMgaXRzIGNvbnN0cnVjdG9yIGZyb20gYSBiYXNlIGNsYXNzIHdpdGhvdXQgYW4gQW5ndWxhclxuICAgKiBkZWNvcmF0b3IuXG4gICAqL1xuICBESVJFQ1RJVkVfSU5IRVJJVFNfVU5ERUNPUkFURURfQ1RPUiA9IDIwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIHRoYXQgaXMgdXNpbmcgQW5ndWxhciBmZWF0dXJlc1xuICAgKiBoYXMgYmVlbiBkaXNjb3ZlcmVkLlxuICAgKi9cbiAgVU5ERUNPUkFURURfQ0xBU1NfVVNJTkdfQU5HVUxBUl9GRUFUVVJFUyA9IDIwMDcsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIGNvbXBvbmVudCBjYW5ub3QgcmVzb2x2ZSBhbiBleHRlcm5hbCByZXNvdXJjZSwgc3VjaCBhcyBhIHRlbXBsYXRlIG9yIGEgc3R5bGVcbiAgICogc2hlZXQuXG4gICAqL1xuICBDT01QT05FTlRfUkVTT1VSQ0VfTk9UX0ZPVU5EID0gMjAwOCxcblxuICBTWU1CT0xfTk9UX0VYUE9SVEVEID0gMzAwMSxcbiAgU1lNQk9MX0VYUE9SVEVEX1VOREVSX0RJRkZFUkVOVF9OQU1FID0gMzAwMixcbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlyZWN0aXZlcyBhbmQvb3IgcGlwZXMgd291bGQgY2F1c2UgYSBjeWNsaWMgaW1wb3J0IHRvIGJlXG4gICAqIGNyZWF0ZWQgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZCwgc3VjaCBhcyBpbiBwYXJ0aWFsIGNvbXBpbGF0aW9uIG1vZGUuXG4gICAqL1xuICBJTVBPUlRfQ1lDTEVfREVURUNURUQgPSAzMDAzLFxuXG4gIENPTkZJR19GTEFUX01PRFVMRV9OT19JTkRFWCA9IDQwMDEsXG4gIENPTkZJR19TVFJJQ1RfVEVNUExBVEVTX0lNUExJRVNfRlVMTF9URU1QTEFURV9UWVBFQ0hFQ0sgPSA0MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGhvc3QgZXhwcmVzc2lvbiBoYXMgYSBwYXJzZSBlcnJvciwgc3VjaCBhcyBhIGhvc3QgbGlzdGVuZXIgb3IgaG9zdCBiaW5kaW5nXG4gICAqIGV4cHJlc3Npb24gY29udGFpbmluZyBhIHBpcGUuXG4gICAqL1xuICBIT1NUX0JJTkRJTkdfUEFSU0VfRVJST1IgPSA1MDAxLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiB0aGUgY29tcGlsZXIgY2Fubm90IHBhcnNlIGEgY29tcG9uZW50J3MgdGVtcGxhdGUuXG4gICAqL1xuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9IDUwMDIsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGFuIGludmFsaWQgcmVmZXJlbmNlIGluIGBkZWNsYXJhdGlvbnNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9ERUNMQVJBVElPTiA9IDYwMDEsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGFuIGludmFsaWQgdHlwZSBpbiBgaW1wb3J0c2AuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX0lNUE9SVCA9IDYwMDIsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGFuIGludmFsaWQgdHlwZSBpbiBgZXhwb3J0c2AuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX0VYUE9SVCA9IDYwMDMsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGEgdHlwZSBpbiBgZXhwb3J0c2Agd2hpY2ggaXMgbmVpdGhlciBpbiBgZGVjbGFyYXRpb25zYCBub3JcbiAgICogb3RoZXJ3aXNlIGltcG9ydGVkLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9SRUVYUE9SVCA9IDYwMDQsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgYE1vZHVsZVdpdGhQcm92aWRlcnNgIHdpdGggYSBtaXNzaW5nXG4gICAqIGdlbmVyaWMgdHlwZSBhcmd1bWVudCBpcyBwYXNzZWQgaW50byBhbiBgTmdNb2R1bGVgLlxuICAgKi9cbiAgTkdNT0RVTEVfTU9EVUxFX1dJVEhfUFJPVklERVJTX01JU1NJTkdfR0VORVJJQyA9IDYwMDUsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGV4cG9ydHMgbXVsdGlwbGUgZGlyZWN0aXZlcy9waXBlcyBvZiB0aGUgc2FtZSBuYW1lIGFuZCB0aGUgY29tcGlsZXJcbiAgICogYXR0ZW1wdHMgdG8gZ2VuZXJhdGUgcHJpdmF0ZSByZS1leHBvcnRzIHdpdGhpbiB0aGUgTmdNb2R1bGUgZmlsZS5cbiAgICovXG4gIE5HTU9EVUxFX1JFRVhQT1JUX05BTUVfQ09MTElTSU9OID0gNjAwNixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBkaXJlY3RpdmUvcGlwZSBpcyBwYXJ0IG9mIHRoZSBkZWNsYXJhdGlvbnMgb2YgdHdvIG9yIG1vcmUgTmdNb2R1bGVzLlxuICAgKi9cbiAgTkdNT0RVTEVfREVDTEFSQVRJT05fTk9UX1VOSVFVRSA9IDYwMDcsXG5cbiAgLyoqXG4gICAqIEFuIGVsZW1lbnQgbmFtZSBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgU0NIRU1BX0lOVkFMSURfRUxFTUVOVCA9IDgwMDEsXG5cbiAgLyoqXG4gICAqIEFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgbmFtZSBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFID0gODAwMixcblxuICAvKipcbiAgICogTm8gbWF0Y2hpbmcgZGlyZWN0aXZlIHdhcyBmb3VuZCBmb3IgYSBgI3JlZj1cInRhcmdldFwiYCBleHByZXNzaW9uLlxuICAgKi9cbiAgTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VUID0gODAwMyxcblxuICAvKipcbiAgICogTm8gbWF0Y2hpbmcgcGlwZSB3YXMgZm91bmQgZm9yIGFcbiAgICovXG4gIE1JU1NJTkdfUElQRSA9IDgwMDQsXG5cbiAgLyoqXG4gICAqIFRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gd2FzIGEgdGVtcGxhdGUgdmFyaWFibGUuIEVmZmVjdGl2ZWx5LCB0aGVcbiAgICogdGVtcGxhdGUgbG9va2VkIGxpa2U6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8bmctdGVtcGxhdGUgbGV0LXNvbWV0aGluZz5cbiAgICogICA8YnV0dG9uIChjbGljayk9XCJzb21ldGhpbmcgPSAuLi5cIj4uLi48L2J1dHRvbj5cbiAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICogYGBgXG4gICAqXG4gICAqIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LlxuICAgKi9cbiAgV1JJVEVfVE9fUkVBRF9PTkxZX1ZBUklBQkxFID0gODAwNSxcblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgdHdpY2UuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICogPC9kaXY+XG4gICAqIGBgYFxuICAgKi9cbiAgRFVQTElDQVRFX1ZBUklBQkxFX0RFQ0xBUkFUSU9OID0gODAwNixcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgZW5naW5lIHdvdWxkIG5lZWQgdG8gZ2VuZXJhdGUgYW4gaW5saW5lIHR5cGUgY2hlY2sgYmxvY2sgZm9yIGFcbiAgICogY29tcG9uZW50LCBidXQgdGhlIGN1cnJlbnQgdHlwZS1jaGVja2luZyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgaXQuXG4gICAqL1xuICBJTkxJTkVfVENCX1JFUVVJUkVEID0gODkwMCxcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgZW5naW5lIHdvdWxkIG5lZWQgdG8gZ2VuZXJhdGUgYW4gaW5saW5lIHR5cGUgY29uc3RydWN0b3IgZm9yIGFcbiAgICogZGlyZWN0aXZlIG9yIGNvbXBvbmVudCwgYnV0IHRoZSBjdXJyZW50IHR5cGUtY2hlY2tpbmcgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IGl0LlxuICAgKi9cbiAgSU5MSU5FX1RZUEVfQ1RPUl9SRVFVSVJFRCA9IDg5MDEsXG5cbiAgLyoqXG4gICAqIEFuIGluamVjdGFibGUgYWxyZWFkeSBoYXMgYSBgybVwcm92YCBwcm9wZXJ0eS5cbiAgICovXG4gIElOSkVDVEFCTEVfRFVQTElDQVRFX1BST1YgPSA5MDAxLFxuXG4gIC8vIDEwWFhYIGVycm9yIGNvZGVzIGFyZSByZXNlcnZlZCBmb3IgZGlhZ25vc3RpY3Mgd2l0aCBjYXRlZ29yaWVzIG90aGVyIHRoYW5cbiAgLy8gYHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcmAuIFRoZXNlIGRpYWdub3N0aWNzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gY29uZmlndXJlZFxuICAvLyB0byBkbyBzbyBieSBhIHRvb2wgc3VjaCBhcyB0aGUgTGFuZ3VhZ2UgU2VydmljZSwgb3IgYnkgdGhlIExhbmd1YWdlIFNlcnZpY2UgaXRzZWxmLlxuXG4gIC8qKlxuICAgKiBTdWdnZXN0IHVzZXJzIHRvIGVuYWJsZSBgc3RyaWN0VGVtcGxhdGVzYCB0byBtYWtlIHVzZSBvZiBmdWxsIGNhcGFiaWxpdGllc1xuICAgKiBwcm92aWRlZCBieSBBbmd1bGFyIGxhbmd1YWdlIHNlcnZpY2UuXG4gICAqL1xuICBTVUdHRVNUX1NUUklDVF9URU1QTEFURVMgPSAxMDAwMSxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYSBwYXJ0aWN1bGFyIHN0cnVjdHVyYWwgZGlyZWN0aXZlIHByb3ZpZGVzIGFkdmFuY2VkIHR5cGUgbmFycm93aW5nXG4gICAqIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGUgY3VycmVudCB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgYWxsb3cgaXRzIHVzYWdlIGluXG4gICAqIHR5cGUgaW5mZXJlbmNlLlxuICAgKi9cbiAgU1VHR0VTVF9TVUJPUFRJTUFMX1RZUEVfSU5GRVJFTkNFID0gMTAwMDIsXG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBCYXNlIFVSTCBmb3IgdGhlIGVycm9yIGRldGFpbHMgcGFnZS5cbiAqIEtlZXAgdGhpcyB2YWx1ZSBpbiBzeW5jIHdpdGggYSBzaW1pbGFyIGNvbnN0IGluXG4gKiBgcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy9lcnJvcl9jb2RlLnRzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RFVEFJTFNfUEFHRV9CQVNFX1VSTCA9ICdodHRwczovL2FuZ3VsYXIuaW8vZXJyb3JzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIENvbnRhaW5zIGEgc2V0IG9mIGVycm9yIG1lc3NhZ2VzIHRoYXQgaGF2ZSBkZXRhaWxlZCBndWlkZXMgYXQgYW5ndWxhci5pby5cbiAqIEZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgZXJyb3IgZ3VpZGVzIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL2FuZ3VsYXIuaW8vZXJyb3JzXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QSUxFUl9FUlJPUlNfV0lUSF9HVUlERVMgPSBuZXcgU2V0KFtcbiAgRXJyb3JDb2RlLkRFQ09SQVRPUl9BUkdfTk9UX0xJVEVSQUwsXG4gIEVycm9yQ29kZS5JTVBPUlRfQ1lDTEVfREVURUNURUQsXG4gIEVycm9yQ29kZS5QQVJBTV9NSVNTSU5HX1RPS0VOLFxuICBFcnJvckNvZGUuU0NIRU1BX0lOVkFMSURfRUxFTUVOVCxcbiAgRXJyb3JDb2RlLlNDSEVNQV9JTlZBTElEX0FUVFJJQlVURSxcbiAgRXJyb3JDb2RlLk1JU1NJTkdfUkVGRVJFTkNFX1RBUkdFVCxcbl0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmdFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KCctOTknICsgY29kZSk7XG59XG4iXX0=
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JfY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2Vycm9yX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7O09BRUc7SUFDSCxJQUFZLFNBd0xYO0lBeExELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQzs7O1dBR0c7UUFDSCxvSEFBK0MsQ0FBQTtRQUUvQzs7O1dBR0c7UUFDSCw0RkFBbUMsQ0FBQTtRQUVuQywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUMzQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1QiwwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRFQUEyQixDQUFBO1FBRTNCOztXQUVHO1FBQ0gsNEZBQW1DLENBQUE7UUFFbkM7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7V0FFRztRQUNILGtGQUE4QixDQUFBO1FBRTlCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOzs7V0FHRztRQUNILGdJQUFxRCxDQUFBO1FBRXJEOzs7V0FHRztRQUNILG9HQUF1QyxDQUFBO1FBRXZDOztXQUVHO1FBQ0gsa0dBQXNDLENBQUE7UUFFdEM7OztXQUdHO1FBQ0gsc0dBQXdDLENBQUE7UUFFeEM7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOzs7Ozs7O1dBT0c7UUFDSCxnR0FBcUMsQ0FBQTtRQUVyQzs7O1dBR0c7UUFDSCwwRUFBMEIsQ0FBQTtRQUUxQjs7O1dBR0c7UUFDSCxzRkFBZ0MsQ0FBQTtRQUVoQzs7V0FFRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDLDRFQUE0RTtRQUM1RSxpR0FBaUc7UUFDakcsc0ZBQXNGO1FBRXRGOzs7V0FHRztRQUNILHFGQUFnQyxDQUFBO1FBRWhDOzs7O1dBSUc7UUFDSCx1R0FBeUMsQ0FBQTtJQUMzQyxDQUFDLEVBeExXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBd0xwQjtJQUVEOzs7OztPQUtHO0lBQ1UsUUFBQSwyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztJQUV2RTs7OztPQUlHO0lBQ1UsUUFBQSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUNqRCxTQUFTLENBQUMseUJBQXlCO1FBQ25DLFNBQVMsQ0FBQyxxQkFBcUI7UUFDL0IsU0FBUyxDQUFDLG1CQUFtQjtRQUM3QixTQUFTLENBQUMsc0JBQXNCO1FBQ2hDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLHdCQUF3QjtLQUNuQyxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFlO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRkQsa0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBlbnVtIEVycm9yQ29kZSB7XG4gIERFQ09SQVRPUl9BUkdfTk9UX0xJVEVSQUwgPSAxMDAxLFxuICBERUNPUkFUT1JfQVJJVFlfV1JPTkcgPSAxMDAyLFxuICBERUNPUkFUT1JfTk9UX0NBTExFRCA9IDEwMDMsXG4gIERFQ09SQVRPUl9PTl9BTk9OWU1PVVNfQ0xBU1MgPSAxMDA0LFxuICBERUNPUkFUT1JfVU5FWFBFQ1RFRCA9IDEwMDUsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgaW5jb21wYXRpYmxlIGRlY29yYXRvcnMgb24gYSB0eXBlIG9yIGEgY2xhc3MgZmllbGQuXG4gICAqL1xuICBERUNPUkFUT1JfQ09MTElTSU9OID0gMTAwNixcblxuICBWQUxVRV9IQVNfV1JPTkdfVFlQRSA9IDEwMTAsXG4gIFZBTFVFX05PVF9MSVRFUkFMID0gMTAxMSxcblxuICBDT01QT05FTlRfTUlTU0lOR19URU1QTEFURSA9IDIwMDEsXG4gIFBJUEVfTUlTU0lOR19OQU1FID0gMjAwMixcbiAgUEFSQU1fTUlTU0lOR19UT0tFTiA9IDIwMDMsXG4gIERJUkVDVElWRV9NSVNTSU5HX1NFTEVDVE9SID0gMjAwNCxcblxuICAvKiogUmFpc2VkIHdoZW4gYW4gdW5kZWNvcmF0ZWQgY2xhc3MgaXMgcGFzc2VkIGluIGFzIGEgcHJvdmlkZXIgdG8gYSBtb2R1bGUgb3IgYSBkaXJlY3RpdmUuICovXG4gIFVOREVDT1JBVEVEX1BST1ZJREVSID0gMjAwNSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBEaXJlY3RpdmUgaW5oZXJpdHMgaXRzIGNvbnN0cnVjdG9yIGZyb20gYSBiYXNlIGNsYXNzIHdpdGhvdXQgYW4gQW5ndWxhclxuICAgKiBkZWNvcmF0b3IuXG4gICAqL1xuICBESVJFQ1RJVkVfSU5IRVJJVFNfVU5ERUNPUkFURURfQ1RPUiA9IDIwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIHRoYXQgaXMgdXNpbmcgQW5ndWxhciBmZWF0dXJlc1xuICAgKiBoYXMgYmVlbiBkaXNjb3ZlcmVkLlxuICAgKi9cbiAgVU5ERUNPUkFURURfQ0xBU1NfVVNJTkdfQU5HVUxBUl9GRUFUVVJFUyA9IDIwMDcsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIGNvbXBvbmVudCBjYW5ub3QgcmVzb2x2ZSBhbiBleHRlcm5hbCByZXNvdXJjZSwgc3VjaCBhcyBhIHRlbXBsYXRlIG9yIGEgc3R5bGVcbiAgICogc2hlZXQuXG4gICAqL1xuICBDT01QT05FTlRfUkVTT1VSQ0VfTk9UX0ZPVU5EID0gMjAwOCxcblxuICBTWU1CT0xfTk9UX0VYUE9SVEVEID0gMzAwMSxcbiAgU1lNQk9MX0VYUE9SVEVEX1VOREVSX0RJRkZFUkVOVF9OQU1FID0gMzAwMixcbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlyZWN0aXZlcyBhbmQvb3IgcGlwZXMgd291bGQgY2F1c2UgYSBjeWNsaWMgaW1wb3J0IHRvIGJlXG4gICAqIGNyZWF0ZWQgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZCwgc3VjaCBhcyBpbiBwYXJ0aWFsIGNvbXBpbGF0aW9uIG1vZGUuXG4gICAqL1xuICBJTVBPUlRfQ1lDTEVfREVURUNURUQgPSAzMDAzLFxuXG4gIENPTkZJR19GTEFUX01PRFVMRV9OT19JTkRFWCA9IDQwMDEsXG4gIENPTkZJR19TVFJJQ1RfVEVNUExBVEVTX0lNUExJRVNfRlVMTF9URU1QTEFURV9UWVBFQ0hFQ0sgPSA0MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGhvc3QgZXhwcmVzc2lvbiBoYXMgYSBwYXJzZSBlcnJvciwgc3VjaCBhcyBhIGhvc3QgbGlzdGVuZXIgb3IgaG9zdCBiaW5kaW5nXG4gICAqIGV4cHJlc3Npb24gY29udGFpbmluZyBhIHBpcGUuXG4gICAqL1xuICBIT1NUX0JJTkRJTkdfUEFSU0VfRVJST1IgPSA1MDAxLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiB0aGUgY29tcGlsZXIgY2Fubm90IHBhcnNlIGEgY29tcG9uZW50J3MgdGVtcGxhdGUuXG4gICAqL1xuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9IDUwMDIsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGFuIGludmFsaWQgcmVmZXJlbmNlIGluIGBkZWNsYXJhdGlvbnNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9ERUNMQVJBVElPTiA9IDYwMDEsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGFuIGludmFsaWQgdHlwZSBpbiBgaW1wb3J0c2AuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX0lNUE9SVCA9IDYwMDIsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGFuIGludmFsaWQgdHlwZSBpbiBgZXhwb3J0c2AuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX0VYUE9SVCA9IDYwMDMsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGNvbnRhaW5zIGEgdHlwZSBpbiBgZXhwb3J0c2Agd2hpY2ggaXMgbmVpdGhlciBpbiBgZGVjbGFyYXRpb25zYCBub3JcbiAgICogb3RoZXJ3aXNlIGltcG9ydGVkLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9SRUVYUE9SVCA9IDYwMDQsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgYE1vZHVsZVdpdGhQcm92aWRlcnNgIHdpdGggYSBtaXNzaW5nXG4gICAqIGdlbmVyaWMgdHlwZSBhcmd1bWVudCBpcyBwYXNzZWQgaW50byBhbiBgTmdNb2R1bGVgLlxuICAgKi9cbiAgTkdNT0RVTEVfTU9EVUxFX1dJVEhfUFJPVklERVJTX01JU1NJTkdfR0VORVJJQyA9IDYwMDUsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIE5nTW9kdWxlIGV4cG9ydHMgbXVsdGlwbGUgZGlyZWN0aXZlcy9waXBlcyBvZiB0aGUgc2FtZSBuYW1lIGFuZCB0aGUgY29tcGlsZXJcbiAgICogYXR0ZW1wdHMgdG8gZ2VuZXJhdGUgcHJpdmF0ZSByZS1leHBvcnRzIHdpdGhpbiB0aGUgTmdNb2R1bGUgZmlsZS5cbiAgICovXG4gIE5HTU9EVUxFX1JFRVhQT1JUX05BTUVfQ09MTElTSU9OID0gNjAwNixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBkaXJlY3RpdmUvcGlwZSBpcyBwYXJ0IG9mIHRoZSBkZWNsYXJhdGlvbnMgb2YgdHdvIG9yIG1vcmUgTmdNb2R1bGVzLlxuICAgKi9cbiAgTkdNT0RVTEVfREVDTEFSQVRJT05fTk9UX1VOSVFVRSA9IDYwMDcsXG5cbiAgLyoqXG4gICAqIE5vdCBhY3R1YWxseSByYWlzZWQgYnkgdGhlIGNvbXBpbGVyLCBidXQgcmVzZXJ2ZWQgZm9yIGRvY3VtZW50YXRpb24gb2YgYSBWaWV3IEVuZ2luZSBlcnJvciB3aGVuXG4gICAqIGEgVmlldyBFbmdpbmUgYnVpbGQgZGVwZW5kcyBvbiBhbiBJdnktY29tcGlsZWQgTmdNb2R1bGUuXG4gICAqL1xuICBOR01PRFVMRV9WRV9ERVBFTkRFTkNZX09OX0lWWV9MSUIgPSA2OTk5LFxuXG4gIC8qKlxuICAgKiBBbiBlbGVtZW50IG5hbWUgZmFpbGVkIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgRE9NIHNjaGVtYS5cbiAgICovXG4gIFNDSEVNQV9JTlZBTElEX0VMRU1FTlQgPSA4MDAxLFxuXG4gIC8qKlxuICAgKiBBbiBlbGVtZW50J3MgYXR0cmlidXRlIG5hbWUgZmFpbGVkIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgRE9NIHNjaGVtYS5cbiAgICovXG4gIFNDSEVNQV9JTlZBTElEX0FUVFJJQlVURSA9IDgwMDIsXG5cbiAgLyoqXG4gICAqIE5vIG1hdGNoaW5nIGRpcmVjdGl2ZSB3YXMgZm91bmQgZm9yIGEgYCNyZWY9XCJ0YXJnZXRcImAgZXhwcmVzc2lvbi5cbiAgICovXG4gIE1JU1NJTkdfUkVGRVJFTkNFX1RBUkdFVCA9IDgwMDMsXG5cbiAgLyoqXG4gICAqIE5vIG1hdGNoaW5nIHBpcGUgd2FzIGZvdW5kIGZvciBhXG4gICAqL1xuICBNSVNTSU5HX1BJUEUgPSA4MDA0LFxuXG4gIC8qKlxuICAgKiBUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9uIHdhcyBhIHRlbXBsYXRlIHZhcmlhYmxlLiBFZmZlY3RpdmVseSwgdGhlXG4gICAqIHRlbXBsYXRlIGxvb2tlZCBsaWtlOlxuICAgKlxuICAgKiBgYGBcbiAgICogPG5nLXRlbXBsYXRlIGxldC1zb21ldGhpbmc+XG4gICAqICAgPGJ1dHRvbiAoY2xpY2spPVwic29tZXRoaW5nID0gLi4uXCI+Li4uPC9idXR0b24+XG4gICAqIDwvbmctdGVtcGxhdGU+XG4gICAqIGBgYFxuICAgKlxuICAgKiBUZW1wbGF0ZSB2YXJpYWJsZXMgYXJlIHJlYWQtb25seS5cbiAgICovXG4gIFdSSVRFX1RPX1JFQURfT05MWV9WQVJJQUJMRSA9IDgwMDUsXG5cbiAgLyoqXG4gICAqIEEgdGVtcGxhdGUgdmFyaWFibGUgd2FzIGRlY2xhcmVkIHR3aWNlLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogYGBgaHRtbFxuICAgKiA8ZGl2ICpuZ0Zvcj1cImxldCBpIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAqIDwvZGl2PlxuICAgKiBgYGBcbiAgICovXG4gIERVUExJQ0FURV9WQVJJQUJMRV9ERUNMQVJBVElPTiA9IDgwMDYsXG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIGVuZ2luZSB3b3VsZCBuZWVkIHRvIGdlbmVyYXRlIGFuIGlubGluZSB0eXBlIGNoZWNrIGJsb2NrIGZvciBhXG4gICAqIGNvbXBvbmVudCwgYnV0IHRoZSBjdXJyZW50IHR5cGUtY2hlY2tpbmcgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IGl0LlxuICAgKi9cbiAgSU5MSU5FX1RDQl9SRVFVSVJFRCA9IDg5MDAsXG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIGVuZ2luZSB3b3VsZCBuZWVkIHRvIGdlbmVyYXRlIGFuIGlubGluZSB0eXBlIGNvbnN0cnVjdG9yIGZvciBhXG4gICAqIGRpcmVjdGl2ZSBvciBjb21wb25lbnQsIGJ1dCB0aGUgY3VycmVudCB0eXBlLWNoZWNraW5nIGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiAgICovXG4gIElOTElORV9UWVBFX0NUT1JfUkVRVUlSRUQgPSA4OTAxLFxuXG4gIC8qKlxuICAgKiBBbiBpbmplY3RhYmxlIGFscmVhZHkgaGFzIGEgYMm1cHJvdmAgcHJvcGVydHkuXG4gICAqL1xuICBJTkpFQ1RBQkxFX0RVUExJQ0FURV9QUk9WID0gOTAwMSxcblxuICAvLyAxMFhYWCBlcnJvciBjb2RlcyBhcmUgcmVzZXJ2ZWQgZm9yIGRpYWdub3N0aWNzIHdpdGggY2F0ZWdvcmllcyBvdGhlciB0aGFuXG4gIC8vIGB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3JgLiBUaGVzZSBkaWFnbm9zdGljcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aGVuIGNvbmZpZ3VyZWRcbiAgLy8gdG8gZG8gc28gYnkgYSB0b29sIHN1Y2ggYXMgdGhlIExhbmd1YWdlIFNlcnZpY2UsIG9yIGJ5IHRoZSBMYW5ndWFnZSBTZXJ2aWNlIGl0c2VsZi5cblxuICAvKipcbiAgICogU3VnZ2VzdCB1c2VycyB0byBlbmFibGUgYHN0cmljdFRlbXBsYXRlc2AgdG8gbWFrZSB1c2Ugb2YgZnVsbCBjYXBhYmlsaXRpZXNcbiAgICogcHJvdmlkZWQgYnkgQW5ndWxhciBsYW5ndWFnZSBzZXJ2aWNlLlxuICAgKi9cbiAgU1VHR0VTVF9TVFJJQ1RfVEVNUExBVEVTID0gMTAwMDEsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IGEgcGFydGljdWxhciBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBwcm92aWRlcyBhZHZhbmNlZCB0eXBlIG5hcnJvd2luZ1xuICAgKiBmdW5jdGlvbmFsaXR5LCBidXQgdGhlIGN1cnJlbnQgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBjb25maWd1cmF0aW9uIGRvZXMgbm90IGFsbG93IGl0cyB1c2FnZSBpblxuICAgKiB0eXBlIGluZmVyZW5jZS5cbiAgICovXG4gIFNVR0dFU1RfU1VCT1BUSU1BTF9UWVBFX0lORkVSRU5DRSA9IDEwMDAyLFxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQmFzZSBVUkwgZm9yIHRoZSBlcnJvciBkZXRhaWxzIHBhZ2UuXG4gKiBLZWVwIHRoaXMgdmFsdWUgaW4gc3luYyB3aXRoIGEgc2ltaWxhciBjb25zdCBpblxuICogYHBhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvZXJyb3JfY29kZS50c2AuXG4gKi9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVRBSUxTX1BBR0VfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hbmd1bGFyLmlvL2Vycm9ycyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBDb250YWlucyBhIHNldCBvZiBlcnJvciBtZXNzYWdlcyB0aGF0IGhhdmUgZGV0YWlsZWQgZ3VpZGVzIGF0IGFuZ3VsYXIuaW8uXG4gKiBGdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIGVycm9yIGd1aWRlcyBjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2Vycm9yc1xuICovXG5leHBvcnQgY29uc3QgQ09NUElMRVJfRVJST1JTX1dJVEhfR1VJREVTID0gbmV3IFNldChbXG4gIEVycm9yQ29kZS5ERUNPUkFUT1JfQVJHX05PVF9MSVRFUkFMLFxuICBFcnJvckNvZGUuSU1QT1JUX0NZQ0xFX0RFVEVDVEVELFxuICBFcnJvckNvZGUuUEFSQU1fTUlTU0lOR19UT0tFTixcbiAgRXJyb3JDb2RlLlNDSEVNQV9JTlZBTElEX0VMRU1FTlQsXG4gIEVycm9yQ29kZS5TQ0hFTUFfSU5WQUxJRF9BVFRSSUJVVEUsXG4gIEVycm9yQ29kZS5NSVNTSU5HX1JFRkVSRU5DRV9UQVJHRVQsXG5dKTtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5nRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBwYXJzZUludCgnLTk5JyArIGNvZGUpO1xufVxuIl19
@@ -8,7 +8,7 @@
8
8
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/imports" />
9
9
  export { AliasingHost, AliasStrategy, PrivateExportAliasingHost, UnifiedModulesAliasingHost } from './src/alias';
10
10
  export { ImportRewriter, NoopImportRewriter, R3SymbolsImportRewriter, validateAndRewriteCoreSymbol } from './src/core';
11
- export { DefaultImportRecorder, DefaultImportTracker, NOOP_DEFAULT_IMPORT_RECORDER } from './src/default';
11
+ export { DefaultImportTracker } from './src/default';
12
12
  export { AbsoluteModuleStrategy, EmittedReference, ImportedFile, ImportFlags, LocalIdentifierStrategy, LogicalProjectStrategy, ReferenceEmitStrategy, ReferenceEmitter, RelativePathStrategy, UnifiedModulesStrategy } from './src/emitter';
13
13
  export { Reexport } from './src/reexport';
14
14
  export { OwningModule, Reference } from './src/references';
@@ -16,7 +16,7 @@
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.ModuleResolver = exports.Reference = exports.UnifiedModulesStrategy = exports.RelativePathStrategy = exports.ReferenceEmitter = exports.LogicalProjectStrategy = exports.LocalIdentifierStrategy = exports.ImportFlags = exports.AbsoluteModuleStrategy = exports.NOOP_DEFAULT_IMPORT_RECORDER = exports.DefaultImportTracker = exports.validateAndRewriteCoreSymbol = exports.R3SymbolsImportRewriter = exports.NoopImportRewriter = exports.UnifiedModulesAliasingHost = exports.PrivateExportAliasingHost = exports.AliasStrategy = void 0;
19
+ exports.ModuleResolver = exports.Reference = exports.UnifiedModulesStrategy = exports.RelativePathStrategy = exports.ReferenceEmitter = exports.LogicalProjectStrategy = exports.LocalIdentifierStrategy = exports.ImportFlags = exports.AbsoluteModuleStrategy = exports.DefaultImportTracker = exports.validateAndRewriteCoreSymbol = exports.R3SymbolsImportRewriter = exports.NoopImportRewriter = exports.UnifiedModulesAliasingHost = exports.PrivateExportAliasingHost = exports.AliasStrategy = void 0;
20
20
  var alias_1 = require("@angular/compiler-cli/src/ngtsc/imports/src/alias");
21
21
  Object.defineProperty(exports, "AliasStrategy", { enumerable: true, get: function () { return alias_1.AliasStrategy; } });
22
22
  Object.defineProperty(exports, "PrivateExportAliasingHost", { enumerable: true, get: function () { return alias_1.PrivateExportAliasingHost; } });
@@ -27,7 +27,6 @@
27
27
  Object.defineProperty(exports, "validateAndRewriteCoreSymbol", { enumerable: true, get: function () { return core_1.validateAndRewriteCoreSymbol; } });
28
28
  var default_1 = require("@angular/compiler-cli/src/ngtsc/imports/src/default");
29
29
  Object.defineProperty(exports, "DefaultImportTracker", { enumerable: true, get: function () { return default_1.DefaultImportTracker; } });
30
- Object.defineProperty(exports, "NOOP_DEFAULT_IMPORT_RECORDER", { enumerable: true, get: function () { return default_1.NOOP_DEFAULT_IMPORT_RECORDER; } });
31
30
  var emitter_1 = require("@angular/compiler-cli/src/ngtsc/imports/src/emitter");
32
31
  Object.defineProperty(exports, "AbsoluteModuleStrategy", { enumerable: true, get: function () { return emitter_1.AbsoluteModuleStrategy; } });
33
32
  Object.defineProperty(exports, "ImportFlags", { enumerable: true, get: function () { return emitter_1.ImportFlags; } });
@@ -41,4 +40,4 @@
41
40
  var resolver_1 = require("@angular/compiler-cli/src/ngtsc/imports/src/resolver");
42
41
  Object.defineProperty(exports, "ModuleResolver", { enumerable: true, get: function () { return resolver_1.ModuleResolver; } });
43
42
  });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2ltcG9ydHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsMkVBQStHO0lBQXpGLHNHQUFBLGFBQWEsT0FBQTtJQUFFLGtIQUFBLHlCQUF5QixPQUFBO0lBQUUsbUhBQUEsMEJBQTBCLE9BQUE7SUFDMUYseUVBQXFIO0lBQTdGLDBHQUFBLGtCQUFrQixPQUFBO0lBQUUsK0dBQUEsdUJBQXVCLE9BQUE7SUFBRSxvSEFBQSw0QkFBNEIsT0FBQTtJQUNqRywrRUFBd0c7SUFBekUsK0dBQUEsb0JBQW9CLE9BQUE7SUFBRSx1SEFBQSw0QkFBNEIsT0FBQTtJQUNqRiwrRUFBME87SUFBbE8saUhBQUEsc0JBQXNCLE9BQUE7SUFBa0Msc0dBQUEsV0FBVyxPQUFBO0lBQUUsa0hBQUEsdUJBQXVCLE9BQUE7SUFBRSxpSEFBQSxzQkFBc0IsT0FBQTtJQUF5QiwyR0FBQSxnQkFBZ0IsT0FBQTtJQUFFLCtHQUFBLG9CQUFvQixPQUFBO0lBQUUsaUhBQUEsc0JBQXNCLE9BQUE7SUFFbk4scUZBQXlEO0lBQW5DLHVHQUFBLFNBQVMsT0FBQTtJQUMvQixpRkFBOEM7SUFBdEMsMEdBQUEsY0FBYyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7QWxpYXNpbmdIb3N0LCBBbGlhc1N0cmF0ZWd5LCBQcml2YXRlRXhwb3J0QWxpYXNpbmdIb3N0LCBVbmlmaWVkTW9kdWxlc0FsaWFzaW5nSG9zdH0gZnJvbSAnLi9zcmMvYWxpYXMnO1xuZXhwb3J0IHtJbXBvcnRSZXdyaXRlciwgTm9vcEltcG9ydFJld3JpdGVyLCBSM1N5bWJvbHNJbXBvcnRSZXdyaXRlciwgdmFsaWRhdGVBbmRSZXdyaXRlQ29yZVN5bWJvbH0gZnJvbSAnLi9zcmMvY29yZSc7XG5leHBvcnQge0RlZmF1bHRJbXBvcnRSZWNvcmRlciwgRGVmYXVsdEltcG9ydFRyYWNrZXIsIE5PT1BfREVGQVVMVF9JTVBPUlRfUkVDT1JERVJ9IGZyb20gJy4vc3JjL2RlZmF1bHQnO1xuZXhwb3J0IHtBYnNvbHV0ZU1vZHVsZVN0cmF0ZWd5LCBFbWl0dGVkUmVmZXJlbmNlLCBJbXBvcnRlZEZpbGUsIEltcG9ydEZsYWdzLCBMb2NhbElkZW50aWZpZXJTdHJhdGVneSwgTG9naWNhbFByb2plY3RTdHJhdGVneSwgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5LCBSZWZlcmVuY2VFbWl0dGVyLCBSZWxhdGl2ZVBhdGhTdHJhdGVneSwgVW5pZmllZE1vZHVsZXNTdHJhdGVneX0gZnJvbSAnLi9zcmMvZW1pdHRlcic7XG5leHBvcnQge1JlZXhwb3J0fSBmcm9tICcuL3NyYy9yZWV4cG9ydCc7XG5leHBvcnQge093bmluZ01vZHVsZSwgUmVmZXJlbmNlfSBmcm9tICcuL3NyYy9yZWZlcmVuY2VzJztcbmV4cG9ydCB7TW9kdWxlUmVzb2x2ZXJ9IGZyb20gJy4vc3JjL3Jlc29sdmVyJztcbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2ltcG9ydHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsMkVBQStHO0lBQXpGLHNHQUFBLGFBQWEsT0FBQTtJQUFFLGtIQUFBLHlCQUF5QixPQUFBO0lBQUUsbUhBQUEsMEJBQTBCLE9BQUE7SUFDMUYseUVBQXFIO0lBQTdGLDBHQUFBLGtCQUFrQixPQUFBO0lBQUUsK0dBQUEsdUJBQXVCLE9BQUE7SUFBRSxvSEFBQSw0QkFBNEIsT0FBQTtJQUNqRywrRUFBbUQ7SUFBM0MsK0dBQUEsb0JBQW9CLE9BQUE7SUFDNUIsK0VBQTBPO0lBQWxPLGlIQUFBLHNCQUFzQixPQUFBO0lBQWtDLHNHQUFBLFdBQVcsT0FBQTtJQUFFLGtIQUFBLHVCQUF1QixPQUFBO0lBQUUsaUhBQUEsc0JBQXNCLE9BQUE7SUFBeUIsMkdBQUEsZ0JBQWdCLE9BQUE7SUFBRSwrR0FBQSxvQkFBb0IsT0FBQTtJQUFFLGlIQUFBLHNCQUFzQixPQUFBO0lBRW5OLHFGQUF5RDtJQUFuQyx1R0FBQSxTQUFTLE9BQUE7SUFDL0IsaUZBQThDO0lBQXRDLDBHQUFBLGNBQWMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0FsaWFzaW5nSG9zdCwgQWxpYXNTdHJhdGVneSwgUHJpdmF0ZUV4cG9ydEFsaWFzaW5nSG9zdCwgVW5pZmllZE1vZHVsZXNBbGlhc2luZ0hvc3R9IGZyb20gJy4vc3JjL2FsaWFzJztcbmV4cG9ydCB7SW1wb3J0UmV3cml0ZXIsIE5vb3BJbXBvcnRSZXdyaXRlciwgUjNTeW1ib2xzSW1wb3J0UmV3cml0ZXIsIHZhbGlkYXRlQW5kUmV3cml0ZUNvcmVTeW1ib2x9IGZyb20gJy4vc3JjL2NvcmUnO1xuZXhwb3J0IHtEZWZhdWx0SW1wb3J0VHJhY2tlcn0gZnJvbSAnLi9zcmMvZGVmYXVsdCc7XG5leHBvcnQge0Fic29sdXRlTW9kdWxlU3RyYXRlZ3ksIEVtaXR0ZWRSZWZlcmVuY2UsIEltcG9ydGVkRmlsZSwgSW1wb3J0RmxhZ3MsIExvY2FsSWRlbnRpZmllclN0cmF0ZWd5LCBMb2dpY2FsUHJvamVjdFN0cmF0ZWd5LCBSZWZlcmVuY2VFbWl0U3RyYXRlZ3ksIFJlZmVyZW5jZUVtaXR0ZXIsIFJlbGF0aXZlUGF0aFN0cmF0ZWd5LCBVbmlmaWVkTW9kdWxlc1N0cmF0ZWd5fSBmcm9tICcuL3NyYy9lbWl0dGVyJztcbmV4cG9ydCB7UmVleHBvcnR9IGZyb20gJy4vc3JjL3JlZXhwb3J0JztcbmV4cG9ydCB7T3duaW5nTW9kdWxlLCBSZWZlcmVuY2V9IGZyb20gJy4vc3JjL3JlZmVyZW5jZXMnO1xuZXhwb3J0IHtNb2R1bGVSZXNvbHZlcn0gZnJvbSAnLi9zcmMvcmVzb2x2ZXInO1xuIl19
@@ -6,39 +6,18 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/imports/src/default" />
9
+ import { WrappedNodeExpr } from '@angular/compiler';
9
10
  import * as ts from 'typescript';
10
11
  /**
11
- * Registers and records usages of `ts.Identifer`s that came from default import statements.
12
- *
13
- * See `DefaultImportTracker` for details.
12
+ * Attaches a default import declaration to `expr` to indicate the dependency of `expr` on the
13
+ * default import.
14
14
  */
15
- export interface DefaultImportRecorder {
16
- /**
17
- * Record an association between a `ts.Identifier` which might be emitted and the
18
- * `ts.ImportDeclaration` from which it came.
19
- *
20
- * Alone, this method has no effect as the `ts.Identifier` might not be used in the output.
21
- * The identifier must later be marked as used with `recordUsedIdentifier` in order for its
22
- * import to be preserved.
23
- */
24
- recordImportedIdentifier(id: ts.Identifier, decl: ts.ImportDeclaration): void;
25
- /**
26
- * Record the fact that the given `ts.Identifer` will be emitted, and thus its
27
- * `ts.ImportDeclaration`, if it was a previously registered default import, must be preserved.
28
- *
29
- * This method can be called safely for any `ts.Identifer`, regardless of its origin. It will only
30
- * have an effect if the identifier came from a `ts.ImportDeclaration` default import which was
31
- * previously registered with `recordImportedIdentifier`.
32
- */
33
- recordUsedIdentifier(id: ts.Identifier): void;
34
- }
15
+ export declare function attachDefaultImportDeclaration(expr: WrappedNodeExpr<unknown>, importDecl: ts.ImportDeclaration): void;
35
16
  /**
36
- * An implementation of `DefaultImportRecorder` which does nothing.
37
- *
38
- * This is useful when default import tracking isn't required, such as when emitting .d.ts code
39
- * or for ngcc.
17
+ * Obtains the default import declaration that `expr` depends on, or `null` if there is no such
18
+ * dependency.
40
19
  */
41
- export declare const NOOP_DEFAULT_IMPORT_RECORDER: DefaultImportRecorder;
20
+ export declare function getDefaultImportDeclaration(expr: WrappedNodeExpr<unknown>): ts.ImportDeclaration | null;
42
21
  /**
43
22
  * TypeScript has trouble with generating default imports inside of transformers for some module
44
23
  * formats. The issue is that for the statement:
@@ -69,24 +48,18 @@ export declare const NOOP_DEFAULT_IMPORT_RECORDER: DefaultImportRecorder;
69
48
  * This problem does not exist for non-default imports as the compiler can easily insert
70
49
  * "import * as X" style imports for those, and the "X" identifier survives transformation.
71
50
  */
72
- export declare class DefaultImportTracker implements DefaultImportRecorder {
73
- /**
74
- * A `Map` which tracks the `Map` of default import `ts.Identifier`s to their
75
- * `ts.ImportDeclaration`s. These declarations are not guaranteed to be used.
76
- */
77
- private sourceFileToImportMap;
51
+ export declare class DefaultImportTracker {
78
52
  /**
79
53
  * A `Map` which tracks the `Set` of `ts.ImportDeclaration`s for default imports that were used in
80
54
  * a given `ts.SourceFile` and need to be preserved.
81
55
  */
82
56
  private sourceFileToUsedImports;
83
- recordImportedIdentifier(id: ts.Identifier, decl: ts.ImportDeclaration): void;
84
- recordUsedIdentifier(id: ts.Identifier): void;
57
+ recordUsedImport(importDecl: ts.ImportDeclaration): void;
85
58
  /**
86
59
  * Get a `ts.TransformerFactory` which will preserve default imports that were previously marked
87
60
  * as used.
88
61
  *
89
- * This transformer must run after any other transformers which call `recordUsedIdentifier`.
62
+ * This transformer must run after any other transformers which call `recordUsedImport`.
90
63
  */
91
64
  importPreservingTransformer(): ts.TransformerFactory<ts.SourceFile>;
92
65
  /**
@@ -16,19 +16,27 @@
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.DefaultImportTracker = exports.NOOP_DEFAULT_IMPORT_RECORDER = void 0;
19
+ exports.DefaultImportTracker = exports.getDefaultImportDeclaration = exports.attachDefaultImportDeclaration = void 0;
20
20
  var ts = require("typescript");
21
21
  var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
22
+ var DefaultImportDeclaration = Symbol('DefaultImportDeclaration');
22
23
  /**
23
- * An implementation of `DefaultImportRecorder` which does nothing.
24
- *
25
- * This is useful when default import tracking isn't required, such as when emitting .d.ts code
26
- * or for ngcc.
24
+ * Attaches a default import declaration to `expr` to indicate the dependency of `expr` on the
25
+ * default import.
26
+ */
27
+ function attachDefaultImportDeclaration(expr, importDecl) {
28
+ expr[DefaultImportDeclaration] = importDecl;
29
+ }
30
+ exports.attachDefaultImportDeclaration = attachDefaultImportDeclaration;
31
+ /**
32
+ * Obtains the default import declaration that `expr` depends on, or `null` if there is no such
33
+ * dependency.
27
34
  */
28
- exports.NOOP_DEFAULT_IMPORT_RECORDER = {
29
- recordImportedIdentifier: function (id) { return void {}; },
30
- recordUsedIdentifier: function (id) { return void {}; },
31
- };
35
+ function getDefaultImportDeclaration(expr) {
36
+ var _a;
37
+ return (_a = expr[DefaultImportDeclaration]) !== null && _a !== void 0 ? _a : null;
38
+ }
39
+ exports.getDefaultImportDeclaration = getDefaultImportDeclaration;
32
40
  /**
33
41
  * TypeScript has trouble with generating default imports inside of transformers for some module
34
42
  * formats. The issue is that for the statement:
@@ -61,47 +69,25 @@
61
69
  */
62
70
  var DefaultImportTracker = /** @class */ (function () {
63
71
  function DefaultImportTracker() {
64
- /**
65
- * A `Map` which tracks the `Map` of default import `ts.Identifier`s to their
66
- * `ts.ImportDeclaration`s. These declarations are not guaranteed to be used.
67
- */
68
- this.sourceFileToImportMap = new Map();
69
72
  /**
70
73
  * A `Map` which tracks the `Set` of `ts.ImportDeclaration`s for default imports that were used in
71
74
  * a given `ts.SourceFile` and need to be preserved.
72
75
  */
73
76
  this.sourceFileToUsedImports = new Map();
74
77
  }
75
- DefaultImportTracker.prototype.recordImportedIdentifier = function (id, decl) {
76
- var sf = typescript_1.getSourceFile(id);
77
- if (!this.sourceFileToImportMap.has(sf)) {
78
- this.sourceFileToImportMap.set(sf, new Map());
79
- }
80
- this.sourceFileToImportMap.get(sf).set(id, decl);
81
- };
82
- DefaultImportTracker.prototype.recordUsedIdentifier = function (id) {
83
- var sf = typescript_1.getSourceFile(id);
84
- if (!this.sourceFileToImportMap.has(sf)) {
85
- // The identifier's source file has no registered default imports at all.
86
- return;
87
- }
88
- var identiferToDeclaration = this.sourceFileToImportMap.get(sf);
89
- if (!identiferToDeclaration.has(id)) {
90
- // The identifier isn't from a registered default import.
91
- return;
92
- }
93
- var decl = identiferToDeclaration.get(id);
78
+ DefaultImportTracker.prototype.recordUsedImport = function (importDecl) {
79
+ var sf = typescript_1.getSourceFile(importDecl);
94
80
  // Add the default import declaration to the set of used import declarations for the file.
95
81
  if (!this.sourceFileToUsedImports.has(sf)) {
96
82
  this.sourceFileToUsedImports.set(sf, new Set());
97
83
  }
98
- this.sourceFileToUsedImports.get(sf).add(decl);
84
+ this.sourceFileToUsedImports.get(sf).add(importDecl);
99
85
  };
100
86
  /**
101
87
  * Get a `ts.TransformerFactory` which will preserve default imports that were previously marked
102
88
  * as used.
103
89
  *
104
- * This transformer must run after any other transformers which call `recordUsedIdentifier`.
90
+ * This transformer must run after any other transformers which call `recordUsedImport`.
105
91
  */
106
92
  DefaultImportTracker.prototype.importPreservingTransformer = function () {
107
93
  var _this = this;
@@ -157,7 +143,6 @@
157
143
  });
158
144
  // Save memory - there's no need to keep these around once the transform has run for the given
159
145
  // file.
160
- this.sourceFileToImportMap.delete(originalSf);
161
146
  this.sourceFileToUsedImports.delete(originalSf);
162
147
  return ts.updateSourceFileNode(sf, statements);
163
148
  };
@@ -165,4 +150,4 @@
165
150
  }());
166
151
  exports.DefaultImportTracker = DefaultImportTracker;
167
152
  });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvaW1wb3J0cy9zcmMvZGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFFakMsa0ZBQXdEO0lBNkJ4RDs7Ozs7T0FLRztJQUNVLFFBQUEsNEJBQTRCLEdBQTBCO1FBQ2pFLHdCQUF3QixFQUFFLFVBQUMsRUFBaUIsSUFBSyxPQUFBLEtBQUksRUFBRSxFQUFOLENBQU07UUFDdkQsb0JBQW9CLEVBQUUsVUFBQyxFQUFpQixJQUFLLE9BQUEsS0FBSSxFQUFFLEVBQU4sQ0FBTTtLQUNwRCxDQUFDO0lBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNkJHO0lBQ0g7UUFBQTtZQUNFOzs7ZUFHRztZQUNLLDBCQUFxQixHQUN6QixJQUFJLEdBQUcsRUFBMkQsQ0FBQztZQUV2RTs7O2VBR0c7WUFDSyw0QkFBdUIsR0FBRyxJQUFJLEdBQUcsRUFBNEMsQ0FBQztRQWlHeEYsQ0FBQztRQWhHQyx1REFBd0IsR0FBeEIsVUFBeUIsRUFBaUIsRUFBRSxJQUEwQjtZQUNwRSxJQUFNLEVBQUUsR0FBRywwQkFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBdUMsQ0FBQyxDQUFDO2FBQ3BGO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxtREFBb0IsR0FBcEIs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aEQsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDSCwyQkFBQztJQUFELENBQUMsQUE3R0QsSUE2R0M7SUE3R1ksb0RBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldFNvdXJjZUZpbGV9IGZyb20gJy4uLy4uL3V0aWwvc3JjL3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbmQgcmVjb3JkcyB1c2FnZXMgb2YgYHRzLklkZW50aWZlcmBzIHRoYXQgY2FtZSBmcm9tIGRlZmF1bHQgaW1wb3J0IHN0YXRlbWVudHMuXG4gKlxuICogU2VlIGBEZWZhdWx0SW1wb3J0VHJhY2tlcmAgZm9yIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEltcG9ydFJlY29yZGVyIHtcbiAgLyoqXG4gICAqIFJlY29yZCBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIGEgYHRzLklkZW50aWZpZXJgIHdoaWNoIG1pZ2h0IGJlIGVtaXR0ZWQgYW5kIHRoZVxuICAgKiBgdHMuSW1wb3J0RGVjbGFyYXRpb25gIGZyb20gd2hpY2ggaXQgY2FtZS5cbiAgICpcbiAgICogQWxvbmUsIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgYXMgdGhlIGB0cy5JZGVudGlmaWVyYCBtaWdodCBub3QgYmUgdXNlZCBpbiB0aGUgb3V0cHV0LlxuICAgKiBUaGUgaWRlbnRpZmllciBtdXN0IGxhdGVyIGJlIG1hcmtlZCBhcyB1c2VkIHdpdGggYHJlY29yZFVzZWRJZGVudGlmaWVyYCBpbiBvcmRlciBmb3IgaXRzXG4gICAqIGltcG9ydCB0byBiZSBwcmVzZXJ2ZWQuXG4gICAqL1xuICByZWNvcmRJbXBvcnRlZElkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIsIGRlY2w6IHRzLkltcG9ydERlY2xhcmF0aW9uKTogdm9pZDtcblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBmYWN0IHRoYXQgdGhlIGdpdmVuIGB0cy5JZGVudGlmZXJgIHdpbGwgYmUgZW1pdHRlZCwgYW5kIHRodXMgaXRzXG4gICAqIGB0cy5JbXBvcnREZWNsYXJhdGlvbmAsIGlmIGl0IHdhcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBkZWZhdWx0IGltcG9ydCwgbXVzdCBiZSBwcmVzZXJ2ZWQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2FmZWx5IGZvciBhbnkgYHRzLklkZW50aWZlcmAsIHJlZ2FyZGxlc3Mgb2YgaXRzIG9yaWdpbi4gSXQgd2lsbCBvbmx5XG4gICAqIGhhdmUgYW4gZWZmZWN0IGlmIHRoZSBpZGVudGlmaWVyIGNhbWUgZnJvbSBhIGB0cy5JbXBvcnREZWNsYXJhdGlvbmAgZGVmYXVsdCBpbXBvcnQgd2hpY2ggd2FzXG4gICAqIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIGByZWNvcmRJbXBvcnRlZElkZW50aWZpZXJgLlxuICAgKi9cbiAgcmVjb3JkVXNlZElkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBEZWZhdWx0SW1wb3J0UmVjb3JkZXJgIHdoaWNoIGRvZXMgbm90aGluZy5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGRlZmF1bHQgaW1wb3J0IHRyYWNraW5nIGlzbid0IHJlcXVpcmVkLCBzdWNoIGFzIHdoZW4gZW1pdHRpbmcgLmQudHMgY29kZVxuICogb3IgZm9yIG5nY2MuXG4gKi9cbmV4cG9ydCBjb25zdCBOT09QX0RFRkFVTFRfSU1QT1JUX1JFQ09SREVSOiBEZWZhdWx0SW1wb3J0UmVjb3JkZXIgPSB7XG4gIHJlY29yZEltcG9ydGVkSWRlbnRpZmllcjogKGlkOiB0cy5JZGVudGlmaWVyKSA9PiB2b2lke30sXG4gIHJlY29yZFVzZWRJZGVudGlmaWVyOiAoaWQ6IHRzLklkZW50aWZpZXIpID0+IHZvaWR7fSxcbn07XG5cbi8qKlxuICogVHlwZVNjcmlwdCBoYXMgdHJvdWJsZSB3aXRoIGdlbmVyYXRpbmcgZGVmYXVsdCBpbXBvcnRzIGluc2lkZSBvZiB0cmFuc2Zvcm1lcnMgZm9yIHNvbWUgbW9kdWxlXG4gKiBmb3JtYXRzLiBUaGUgaXNzdWUgaXMgdGhhdCBmb3IgdGhlIHN0YXRlbWVudDpcbiAqXG4gKiBpbXBvcnQgWCBmcm9tICdzb21lL21vZHVsZSc7XG4gKiBjb25zb2xlLmxvZyhYKTtcbiAqXG4gKiBUeXBlU2NyaXB0IHdpbGwgbm90IHVzZSB0aGUgXCJYXCIgbmFtZSBpbiBnZW5lcmF0ZWQgY29kZS4gRm9yIG5vcm1hbCB1c2VyIGNvZGUsIHRoaXMgaXMgZmluZVxuICogYmVjYXVzZSByZWZlcmVuY2VzIHRvIFggd2lsbCBhbHNvIGJlIHJlbmFtZWQuIEhvd2V2ZXIsIGlmIGJvdGggdGhlIGltcG9ydCBhbmQgYW55IHJlZmVyZW5jZXMgYXJlXG4gKiBhZGRlZCBpbiBhIHRyYW5zZm9ybWVyLCBUeXBlU2NyaXB0IGRvZXMgbm90IGFzc29jaWF0ZSB0aGUgdHdvLCBhbmQgd2lsbCBsZWF2ZSB0aGUgXCJYXCIgcmVmZXJlbmNlc1xuICogZGFuZ2xpbmcgd2hpbGUgcmVuYW1pbmcgdGhlIGltcG9ydCB2YXJpYWJsZS4gVGhlIGdlbmVyYXRlZCBjb2RlIGxvb2tzIHNvbWV0aGluZyBsaWtlOlxuICpcbiAqIGNvbnN0IG1vZHVsZV8xID0gcmVxdWlyZSgnc29tZS9tb2R1bGUnKTtcbiAqIGNvbnNvbGUubG9nKFgpOyAvLyBub3cgWCBpcyBhIGRhbmdsaW5nIHJlZmVyZW5jZS5cbiAqXG4gKiBUaGVyZWZvcmUsIHdlIGNhbm5vdCBzeW50aGV0aWNhbGx5IGFkZCBkZWZhdWx0IGltcG9ydHMsIGFuZCBtdXN0IHJldXNlIHRoZSBpbXBvcnRzIHRoYXQgdXNlcnNcbiAqIGluY2x1ZGUuIERvaW5nIHRoaXMgcG9zZXMgYSBjaGFsbGVuZ2UgZm9yIGltcG9ydHMgdGhhdCBhcmUgb25seSBjb25zdW1lZCBpbiB0aGUgdHlwZSBwb3NpdGlvbiBpblxuICogdGhlIHVzZXIncyBjb2RlLiBJZiBBbmd1bGFyIHJldXNlcyB0aGUgaW1wb3J0ZWQgc3ltYm9sIGluIGEgdmFsdWUgcG9zaXRpb24gKGZvciBleGFtcGxlLCB3ZVxuICogc2VlIGEgY29uc3RydWN0b3IgcGFyYW1ldGVyIG9mIHR5cGUgRm9vIGFuZCB0cnkgdG8gd3JpdGUgXCJpbmplY3QoRm9vKVwiKSB3ZSB3aWxsIGFsc28gZW5kIHVwIHdpdGhcbiAqIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLCBhcyBUUyB3aWxsIGVsaWRlIHRoZSBpbXBvcnQgYmVjYXVzZSBpdCB3YXMgb25seSB1c2VkIGluIHRoZSB0eXBlIHBvc2l0aW9uXG4gKiBvcmlnaW5hbGx5LlxuICpcbiAqIFRvIGF2b2lkIHRoaXMsIHRoZSBjb21waWxlciBtdXN0IFwidG91Y2hcIiB0aGUgaW1wb3J0cyB3aXRoIGB0cy5nZXRNdXRhYmxlQ2xvbmVgLCBhbmQgc2hvdWxkXG4gKiBvbmx5IGRvIHRoaXMgZm9yIGltcG9ydHMgd2hpY2ggYXJlIGFjdHVhbGx5IGNvbnN1bWVkLiBUaGUgYERlZmF1bHRJbXBvcnRUcmFja2VyYCBrZWVwcyB0cmFjayBvZlxuICogdGhlc2UgaW1wb3J0cyBhcyB0aGV5J3JlIGVuY291bnRlcmVkIGFuZCBlbWl0dGVkLCBhbmQgaW1wbGVtZW50cyBhIHRyYW5zZm9ybSB3aGljaCBjYW4gY29ycmVjdGx5XG4gKiBmbGFnIHRoZSBpbXBvcnRzIGFzIHJlcXVpcmVkLlxuICpcbiAqIFRoaXMgcHJvYmxlbSBkb2VzIG5vdCBleGlzdCBmb3Igbm9uLWRlZmF1bHQgaW1wb3J0cyBhcyB0aGUgY29tcGlsZXIgY2FuIGVhc2lseSBpbnNlcnRcbiAqIFwiaW1wb3J0ICogYXMgWFwiIHN0eWxlIGltcG9ydHMgZm9yIHRob3NlLCBhbmQgdGhlIFwiWFwiIGlkZW50aWZpZXIgc3Vydml2ZXMgdHJhbnNmb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0SW1wb3J0VHJhY2tlciBpbXBsZW1lbnRzIERlZmF1bHRJbXBvcnRSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBBIGBNYXBgIHdoaWNoIHRyYWNrcyB0aGUgYE1hcGAgb2YgZGVmYXVsdCBpbXBvcnQgYHRzLklkZW50aWZpZXJgcyB0byB0aGVpclxuICAgKiBgdHMuSW1wb3J0RGVjbGFyYXRpb25gcy4gVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBzb3VyY2VGaWxlVG9JbXBvcnRNYXAgPVxuICAgICAgbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBNYXA8dHMuSWRlbnRpZmllciwgdHMuSW1wb3J0RGVjbGFyYXRpb24+PigpO1xuXG4gIC8qKlxuICAgKiBBIGBNYXBgIHdoaWNoIHRyYWNrcyB0aGUgYFNldGAgb2YgYHRzLkltcG9ydERlY2xhcmF0aW9uYHMgZm9yIGRlZmF1bHQgaW1wb3J0cyB0aGF0IHdlcmUgdXNlZCBpblxuICAgKiBhIGdpdmVuIGB0cy5Tb3VyY2VGaWxlYCBhbmQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuXG4gICAqL1xuICBwcml2YXRlIHNvdXJjZUZpbGVUb1VzZWRJbXBvcnRzID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBTZXQ8dHMuSW1wb3J0RGVjbGFyYXRpb24+PigpO1xuICByZWNvcmRJbXBvcnRlZElkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIsIGRlY2w6IHRzLkltcG9ydERlY2xhcmF0aW9uKTogdm9pZCB7XG4gICAgY29uc3Qgc2YgPSBnZXRTb3VyY2VGaWxlKGlkKTtcbiAgICBpZiAoIXRoaXMuc291cmNlRmlsZVRvSW1wb3J0TWFwLmhhcyhzZikpIHtcbiAgICAgIHRoaXMuc291cmNlRmlsZVRvSW1wb3J0TWFwLnNldChzZiwgbmV3IE1hcDx0cy5JZGVudGlmaWVyLCB0cy5JbXBvcnREZWNsYXJhdGlvbj4oKSk7XG4gICAgfVxuICAgIHRoaXMuc291cmNlRmlsZVRvSW1wb3J0TWFwLmdldChzZikhLnNldChpZCwgZGVjbCk7XG4gIH1cblxuICByZWNvcmRVc2VkSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IHZvaWQge1xuICAgIGNvbnN0IHNmID0gZ2V0U291cmNlRmlsZShpZCk7XG4gICAgaWYgKCF0aGlzLnNvdXJjZUZpbGVUb0ltcG9ydE1hcC5oYXMoc2YpKSB7XG4gICAgICAvLyBUaGUgaWRlbnRpZmllcidzIHNvdXJjZSBmaWxlIGhhcyBubyByZWdpc3RlcmVkIGRlZmF1bHQgaW1wb3J0cyBhdCBhbGwuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkZW50aWZlclRvRGVjbGFyYXRpb24gPSB0aGlzLnNvdXJjZUZpbGVUb0ltcG9ydE1hcC5nZXQoc2YpITtcbiAgICBpZiAoIWlkZW50aWZlclRvRGVjbGFyYXRpb24uaGFzKGlkKSkge1xuICAgICAgLy8gVGhlIGlkZW50aWZpZXIgaXNuJ3QgZnJvbSBhIHJlZ2lzdGVyZWQgZGVmYXVsdCBpbXBvcnQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlY2wgPSBpZGVudGlmZXJUb0RlY2xhcmF0aW9uLmdldChpZCkhO1xuXG4gICAgLy8gQWRkIHRoZSBkZWZhdWx0IGltcG9ydCBkZWNsYXJhdGlvbiB0byB0aGUgc2V0IG9mIHVzZWQgaW1wb3J0IGRlY2xhcmF0aW9ucyBmb3IgdGhlIGZpbGUuXG4gICAgaWYgKCF0aGlzLnNvdXJjZUZpbGVUb1VzZWRJbXBvcnRzLmhhcyhzZikpIHtcbiAgICAgIHRoaXMuc291cmNlRmlsZVRvVXNlZEltcG9ydHMuc2V0KHNmLCBuZXcgU2V0PHRzLkltcG9ydERlY2xhcmF0aW9uPigpKTtcbiAgICB9XG4gICAgdGhpcy5zb3VyY2VGaWxlVG9Vc2VkSW1wb3J0cy5nZXQoc2YpIS5hZGQoZGVjbCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgYHRzLlRyYW5zZm9ybWVyRmFjdG9yeWAgd2hpY2ggd2lsbCBwcmVzZXJ2ZSBkZWZhdWx0IGltcG9ydHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbWFya2VkXG4gICAqIGFzIHVzZWQuXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtZXIgbXVzdCBydW4gYWZ0ZXIgYW55IG90aGVyIHRyYW5zZm9ybWVycyB3aGljaCBjYWxsIGByZWNvcmRVc2VkSWRlbnRpZmllcmAuXG4gICAqL1xuICBpbXBvcnRQcmVzZXJ2aW5nVHJhbnNmb3JtZXIoKTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+IHtcbiAgICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIChzZjogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Tb3VyY2VGaWxlKHNmKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgYHRzLlNvdXJjZUZpbGVgIGFuZCByZXBsYWNlIGFueSBgdHMuSW1wb3J0RGVjbGFyYXRpb25gcy5cbiAgICovXG4gIHByaXZhdGUgdHJhbnNmb3JtU291cmNlRmlsZShzZjogdHMuU291cmNlRmlsZSk6IHRzLlNvdXJjZUZpbGUge1xuICAgIGNvbnN0IG9yaWdpbmFsU2YgPSB0cy5nZXRPcmlnaW5hbE5vZGUoc2YpIGFzIHRzLlNvdXJjZUZpbGU7XG4gICAgLy8gVGFrZSBhIGZhc3QgcGF0aCBpZiBubyBpbXBvcnQgZGVjbGFyYXRpb25zIG5lZWQgdG8gYmUgcHJlc2VydmVkIGluIHRoZSBmaWxlLlxuICAgIGlmICghdGhpcy5zb3VyY2VGaWxlVG9Vc2VkSW1wb3J0cy5oYXMob3JpZ2luYWxTZikpIHtcbiAgICAgIHJldHVybiBzZjtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBhcmUgZGVjbGFyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuXG4gICAgY29uc3QgaW1wb3J0c1RvUHJlc2VydmUgPSB0aGlzLnNvdXJjZUZpbGVUb1VzZWRJbXBvcnRzLmdldChvcmlnaW5hbFNmKSE7XG5cbiAgICAvLyBHZW5lcmF0ZSBhIG5ldyBzdGF0ZW1lbnQgbGlzdCB3aGljaCBwcmVzZXJ2ZXMgYW55IGltcG9ydHMgcHJlc2VudCBpbiBgaW1wb3J0c1RvUHJlc2VydmVgLlxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzZi5zdGF0ZW1lbnRzLm1hcChzdG10ID0+IHtcbiAgICAgIGlmICh0cy5pc0ltcG9ydERlY2xhcmF0aW9uKHN0bXQpICYmIGltcG9ydHNUb1ByZXNlcnZlLmhhcyhzdG10KSkge1xuICAgICAgICAvLyBQcmVzZXJ2aW5nIGFuIGltcG9ydCB0aGF0J3MgbWFya2VkIGFzIHVucmVmZXJlbmNlZCAodHlwZS1vbmx5KSBpcyB0cmlja3kgaW4gVHlwZVNjcmlwdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVmFyaW91cyBhcHByb2FjaGVzIGhhdmUgYmVlbiB0cmllZCwgd2l0aCBtaXhlZCBzdWNjZXNzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAxLiBVc2luZyBgdHMudXBkYXRlSW1wb3J0RGVjbGFyYXRpb25gIGRvZXMgbm90IGNhdXNlIHRoZSBpbXBvcnQgdG8gYmUgcmV0YWluZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDIuIFVzaW5nIGB0cy5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbmAgd2l0aCB0aGUgc2FtZSBgdHMuSW1wb3J0Q2xhdXNlYCBjYXVzZXMgdGhlIGltcG9ydFxuICAgICAgICAvLyAgICB0byBjb3JyZWN0bHkgYmUgcmV0YWluZWQsIGJ1dCB3aGVuIGVtaXR0aW5nIENvbW1vbkpTIG1vZHVsZSBmb3JtYXQgY29kZSwgcmVmZXJlbmNlc1xuICAgICAgICAvLyAgICB0byB0aGUgaW1wb3J0ZWQgdmFsdWUgd2lsbCBub3QgbWF0Y2ggdGhlIGltcG9ydCB2YXJpYWJsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gMy4gRW1pdHRpbmcgXCJpbXBvcnQgKiBhc1wiIGltcG9ydHMgaW5zdGVhZCBnZW5lcmF0ZXMgdGhlIGNvcnJlY3QgaW1wb3J0IHZhcmlhYmxlLCBidXRcbiAgICAgICAgLy8gICAgcmVmZXJlbmNlcyBhcmUgbWlzc2luZyB0aGUgXCIuZGVmYXVsdFwiIGFjY2Vzcy4gVGhpcyBoYXBwZW5zIHRvIHdvcmsgZm9yIHRzaWNrbGUgY29kZVxuICAgICAgICAvLyAgICB3aXRoIGdvb2cubW9kdWxlIHRyYW5zZm9ybWF0aW9ucyBhcyB0c2lja2xlIHN0cmlwcyB0aGUgXCIuZGVmYXVsdFwiIGFueXdheS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gNC4gSXQncyBwb3NzaWJsZSB0byB0cmljayBUeXBlU2NyaXB0IGJ5IHNldHRpbmcgYHRzLk5vZGVGbGFnLlN5bnRoZXNpemVkYCBvbiB0aGUgaW1wb3J0XG4gICAgICAgIC8vICAgIGRlY2xhcmF0aW9uLiBUaGlzIGNhdXNlcyB0aGUgaW1wb3J0IHRvIGJlIGNvcnJlY3RseSByZXRhaW5lZCBhbmQgZ2VuZXJhdGVkLCBidXQgY2FuXG4gICAgICAgIC8vICAgIHZpb2xhdGUgaW52YXJpYW50cyBlbHNld2hlcmUgaW4gdGhlIGNvbXBpbGVyIGFuZCBjYXVzZSBjcmFzaGVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyA1LiBVc2luZyBgdHMuZ2V0TXV0YWJsZUNsb25lYCBzZWVtcyB0byBjb3JyZWN0bHkgcHJlc2VydmUgdGhlIGltcG9ydCBhbmQgY29ycmVjdGx5XG4gICAgICAgIC8vICAgIGdlbmVyYXRlIHJlZmVyZW5jZXMgdG8gdGhlIGltcG9ydCB2YXJpYWJsZSBhY3Jvc3MgYWxsIG1vZHVsZSB0eXBlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlcmVmb3JlLCBvcHRpb24gNSBpcyB0aGUgb25lIHVzZWQgaGVyZS4gSXQgc2VlbXMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgdGhlIGNvcnJlY3Qgd2F5XG4gICAgICAgIC8vIHRvIHBlcmZvcm0gb3B0aW9uIDQsIHdoaWNoIHByZXNlcnZlcyBhbGwgdGhlIGNvbXBpbGVyJ3MgaW52YXJpYW50cy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVE9ETyhhbHhodWIpOiBkaXNjdXNzIHdpdGggdGhlIFR5cGVTY3JpcHQgdGVhbSBhbmQgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvXG4gICAgICAgIC8vIGRlYWwgd2l0aCB0aGlzIGlzc3VlLlxuICAgICAgICBzdG10ID0gdHMuZ2V0TXV0YWJsZUNsb25lKHN0bXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0bXQ7XG4gICAgfSk7XG5cbiAgICAvLyBTYXZlIG1lbW9yeSAtIHRoZXJlJ3Mgbm8gbmVlZCB0byBrZWVwIHRoZXNlIGFyb3VuZCBvbmNlIHRoZSB0cmFuc2Zvcm0gaGFzIHJ1biBmb3IgdGhlIGdpdmVuXG4gICAgLy8gZmlsZS5cbiAgICB0aGlzLnNvdXJjZUZpbGVUb0ltcG9ydE1hcC5kZWxldGUob3JpZ2luYWxTZik7XG4gICAgdGhpcy5zb3VyY2VGaWxlVG9Vc2VkSW1wb3J0cy5kZWxldGUob3JpZ2luYWxTZik7XG5cbiAgICByZXR1cm4gdHMudXBkYXRlU291cmNlRmlsZU5vZGUoc2YsIHN0YXRlbWVudHMpO1xuICB9XG59XG4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvaW1wb3J0cy9zcmMvZGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFHSCwrQkFBaUM7SUFFakMsa0ZBQXdEO0lBRXhELElBQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFNcEU7OztPQUdHO0lBQ0gsU0FBZ0IsOEJBQThCLENBQzFDLElBQThCLEVBQUUsVUFBZ0M7UUFDakUsSUFBcUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUNoRixDQUFDO0lBSEQsd0VBR0M7SUFFRDs7O09BR0c7SUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxJQUE4Qjs7UUFFeEUsYUFBUSxJQUFxQyxDQUFDLHdCQUF3QixDQUFDLG1DQUFJLElBQUksQ0FBQztJQUNsRixDQUFDO0lBSEQsa0VBR0M7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E2Qkc7SUFDSDtRQUFBO1lBQ0U7OztlQUdHO1lBQ0ssNEJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQTRDLENBQUM7UUErRXhGLENBQUM7UUE3RUMsK0NBQWdCLEdBQWhCLFVBQWlCLFVBQWdDO1lBQy9DLElBQU0sRUFBRSxHQUFHLDBCQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckMsMEZBQTBGO1lBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBd0IsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVEOzs7OztXQUtHO1FBQ0gsMERBQTJCLEdBQTNCO1lBQUEsaUJBTUM7WUFMQyxPQUFPLFVBQUMsT0FBaUM7Z0JBQ3ZDLE9BQU8sVUFBQyxFQUFpQjtvQkFDdkIsT0FBTyxLQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRDs7V0FFRztRQUNLLGtEQUFtQixHQUEzQixVQUE0QixFQUFpQjtZQUMzQyxJQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBa0IsQ0FBQztZQUMzRCwrRUFBK0U7WUFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2pELE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFFRCxvREFBb0Q7WUFDcEQsSUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDO1lBRXhFLDRGQUE0RjtZQUM1RixJQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFBLElBQUk7Z0JBQ3ZDLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDL0QsMEZBQTBGO29CQUMxRixFQUFFO29CQUNGLDBEQUEwRDtvQkFDMUQsRUFBRTtvQkFDRixrRkFBa0Y7b0JBQ2xGLEVBQUU7b0JBQ0YsMEZBQTBGO29CQUMxRix5RkFBeUY7b0JBQ3pGLCtEQUErRDtvQkFDL0QsRUFBRTtvQkFDRix1RkFBdUY7b0JBQ3ZGLHlGQUF5RjtvQkFDekYsK0VBQStFO29CQUMvRSxFQUFFO29CQUNGLDBGQUEwRjtvQkFDMUYseUZBQXlGO29CQUN6RixxRUFBcUU7b0JBQ3JFLEVBQUU7b0JBQ0YscUZBQXFGO29CQUNyRix5RUFBeUU7b0JBQ3pFLEVBQUU7b0JBQ0YsMEZBQTBGO29CQUMxRixzRUFBc0U7b0JBQ3RFLEVBQUU7b0JBQ0YsMEZBQTBGO29CQUMxRix3QkFBd0I7b0JBQ3hCLElBQUksR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNqQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1lBRUgsOEZBQThGO1lBQzlGLFFBQVE7WUFDUixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWhELE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0gsMkJBQUM7SUFBRCxDQUFDLEFBcEZELElBb0ZDO0lBcEZZLG9EQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1dyYXBwZWROb2RlRXhwcn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0U291cmNlRmlsZX0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmNvbnN0IERlZmF1bHRJbXBvcnREZWNsYXJhdGlvbiA9IFN5bWJvbCgnRGVmYXVsdEltcG9ydERlY2xhcmF0aW9uJyk7XG5cbmludGVyZmFjZSBXaXRoRGVmYXVsdEltcG9ydERlY2xhcmF0aW9uIHtcbiAgW0RlZmF1bHRJbXBvcnREZWNsYXJhdGlvbl0/OiB0cy5JbXBvcnREZWNsYXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBdHRhY2hlcyBhIGRlZmF1bHQgaW1wb3J0IGRlY2xhcmF0aW9uIHRvIGBleHByYCB0byBpbmRpY2F0ZSB0aGUgZGVwZW5kZW5jeSBvZiBgZXhwcmAgb24gdGhlXG4gKiBkZWZhdWx0IGltcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaERlZmF1bHRJbXBvcnREZWNsYXJhdGlvbihcbiAgICBleHByOiBXcmFwcGVkTm9kZUV4cHI8dW5rbm93bj4sIGltcG9ydERlY2w6IHRzLkltcG9ydERlY2xhcmF0aW9uKTogdm9pZCB7XG4gIChleHByIGFzIFdpdGhEZWZhdWx0SW1wb3J0RGVjbGFyYXRpb24pW0RlZmF1bHRJbXBvcnREZWNsYXJhdGlvbl0gPSBpbXBvcnREZWNsO1xufVxuXG4vKipcbiAqIE9idGFpbnMgdGhlIGRlZmF1bHQgaW1wb3J0IGRlY2xhcmF0aW9uIHRoYXQgYGV4cHJgIGRlcGVuZHMgb24sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBzdWNoXG4gKiBkZXBlbmRlbmN5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEltcG9ydERlY2xhcmF0aW9uKGV4cHI6IFdyYXBwZWROb2RlRXhwcjx1bmtub3duPik6IHRzLkltcG9ydERlY2xhcmF0aW9ufFxuICAgIG51bGwge1xuICByZXR1cm4gKGV4cHIgYXMgV2l0aERlZmF1bHRJbXBvcnREZWNsYXJhdGlvbilbRGVmYXVsdEltcG9ydERlY2xhcmF0aW9uXSA/PyBudWxsO1xufVxuXG4vKipcbiAqIFR5cGVTY3JpcHQgaGFzIHRyb3VibGUgd2l0aCBnZW5lcmF0aW5nIGRlZmF1bHQgaW1wb3J0cyBpbnNpZGUgb2YgdHJhbnNmb3JtZXJzIGZvciBzb21lIG1vZHVsZVxuICogZm9ybWF0cy4gVGhlIGlzc3VlIGlzIHRoYXQgZm9yIHRoZSBzdGF0ZW1lbnQ6XG4gKlxuICogaW1wb3J0IFggZnJvbSAnc29tZS9tb2R1bGUnO1xuICogY29uc29sZS5sb2coWCk7XG4gKlxuICogVHlwZVNjcmlwdCB3aWxsIG5vdCB1c2UgdGhlIFwiWFwiIG5hbWUgaW4gZ2VuZXJhdGVkIGNvZGUuIEZvciBub3JtYWwgdXNlciBjb2RlLCB0aGlzIGlzIGZpbmVcbiAqIGJlY2F1c2UgcmVmZXJlbmNlcyB0byBYIHdpbGwgYWxzbyBiZSByZW5hbWVkLiBIb3dldmVyLCBpZiBib3RoIHRoZSBpbXBvcnQgYW5kIGFueSByZWZlcmVuY2VzIGFyZVxuICogYWRkZWQgaW4gYSB0cmFuc2Zvcm1lciwgVHlwZVNjcmlwdCBkb2VzIG5vdCBhc3NvY2lhdGUgdGhlIHR3bywgYW5kIHdpbGwgbGVhdmUgdGhlIFwiWFwiIHJlZmVyZW5jZXNcbiAqIGRhbmdsaW5nIHdoaWxlIHJlbmFtaW5nIHRoZSBpbXBvcnQgdmFyaWFibGUuIFRoZSBnZW5lcmF0ZWQgY29kZSBsb29rcyBzb21ldGhpbmcgbGlrZTpcbiAqXG4gKiBjb25zdCBtb2R1bGVfMSA9IHJlcXVpcmUoJ3NvbWUvbW9kdWxlJyk7XG4gKiBjb25zb2xlLmxvZyhYKTsgLy8gbm93IFggaXMgYSBkYW5nbGluZyByZWZlcmVuY2UuXG4gKlxuICogVGhlcmVmb3JlLCB3ZSBjYW5ub3Qgc3ludGhldGljYWxseSBhZGQgZGVmYXVsdCBpbXBvcnRzLCBhbmQgbXVzdCByZXVzZSB0aGUgaW1wb3J0cyB0aGF0IHVzZXJzXG4gKiBpbmNsdWRlLiBEb2luZyB0aGlzIHBvc2VzIGEgY2hhbGxlbmdlIGZvciBpbXBvcnRzIHRoYXQgYXJlIG9ubHkgY29uc3VtZWQgaW4gdGhlIHR5cGUgcG9zaXRpb24gaW5cbiAqIHRoZSB1c2VyJ3MgY29kZS4gSWYgQW5ndWxhciByZXVzZXMgdGhlIGltcG9ydGVkIHN5bWJvbCBpbiBhIHZhbHVlIHBvc2l0aW9uIChmb3IgZXhhbXBsZSwgd2VcbiAqIHNlZSBhIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBvZiB0eXBlIEZvbyBhbmQgdHJ5IHRvIHdyaXRlIFwiaW5qZWN0KEZvbylcIikgd2Ugd2lsbCBhbHNvIGVuZCB1cCB3aXRoXG4gKiBhIGRhbmdsaW5nIHJlZmVyZW5jZSwgYXMgVFMgd2lsbCBlbGlkZSB0aGUgaW1wb3J0IGJlY2F1c2UgaXQgd2FzIG9ubHkgdXNlZCBpbiB0aGUgdHlwZSBwb3NpdGlvblxuICogb3JpZ2luYWxseS5cbiAqXG4gKiBUbyBhdm9pZCB0aGlzLCB0aGUgY29tcGlsZXIgbXVzdCBcInRvdWNoXCIgdGhlIGltcG9ydHMgd2l0aCBgdHMuZ2V0TXV0YWJsZUNsb25lYCwgYW5kIHNob3VsZFxuICogb25seSBkbyB0aGlzIGZvciBpbXBvcnRzIHdoaWNoIGFyZSBhY3R1YWxseSBjb25zdW1lZC4gVGhlIGBEZWZhdWx0SW1wb3J0VHJhY2tlcmAga2VlcHMgdHJhY2sgb2ZcbiAqIHRoZXNlIGltcG9ydHMgYXMgdGhleSdyZSBlbmNvdW50ZXJlZCBhbmQgZW1pdHRlZCwgYW5kIGltcGxlbWVudHMgYSB0cmFuc2Zvcm0gd2hpY2ggY2FuIGNvcnJlY3RseVxuICogZmxhZyB0aGUgaW1wb3J0cyBhcyByZXF1aXJlZC5cbiAqXG4gKiBUaGlzIHByb2JsZW0gZG9lcyBub3QgZXhpc3QgZm9yIG5vbi1kZWZhdWx0IGltcG9ydHMgYXMgdGhlIGNvbXBpbGVyIGNhbiBlYXNpbHkgaW5zZXJ0XG4gKiBcImltcG9ydCAqIGFzIFhcIiBzdHlsZSBpbXBvcnRzIGZvciB0aG9zZSwgYW5kIHRoZSBcIlhcIiBpZGVudGlmaWVyIHN1cnZpdmVzIHRyYW5zZm9ybWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRGVmYXVsdEltcG9ydFRyYWNrZXIge1xuICAvKipcbiAgICogQSBgTWFwYCB3aGljaCB0cmFja3MgdGhlIGBTZXRgIG9mIGB0cy5JbXBvcnREZWNsYXJhdGlvbmBzIGZvciBkZWZhdWx0IGltcG9ydHMgdGhhdCB3ZXJlIHVzZWQgaW5cbiAgICogYSBnaXZlbiBgdHMuU291cmNlRmlsZWAgYW5kIG5lZWQgdG8gYmUgcHJlc2VydmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzb3VyY2VGaWxlVG9Vc2VkSW1wb3J0cyA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgU2V0PHRzLkltcG9ydERlY2xhcmF0aW9uPj4oKTtcblxuICByZWNvcmRVc2VkSW1wb3J0KGltcG9ydERlY2w6IHRzLkltcG9ydERlY2xhcmF0aW9uKTogdm9pZCB7XG4gICAgY29uc3Qgc2YgPSBnZXRTb3VyY2VGaWxlKGltcG9ydERlY2wpO1xuXG4gICAgLy8gQWRkIHRoZSBkZWZhdWx0IGltcG9ydCBkZWNsYXJhdGlvbiB0byB0aGUgc2V0IG9mIHVzZWQgaW1wb3J0IGRlY2xhcmF0aW9ucyBmb3IgdGhlIGZpbGUuXG4gICAgaWYgKCF0aGlzLnNvdXJjZUZpbGVUb1VzZWRJbXBvcnRzLmhhcyhzZikpIHtcbiAgICAgIHRoaXMuc291cmNlRmlsZVRvVXNlZEltcG9ydHMuc2V0KHNmLCBuZXcgU2V0PHRzLkltcG9ydERlY2xhcmF0aW9uPigpKTtcbiAgICB9XG4gICAgdGhpcy5zb3VyY2VGaWxlVG9Vc2VkSW1wb3J0cy5nZXQoc2YpIS5hZGQoaW1wb3J0RGVjbCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgYHRzLlRyYW5zZm9ybWVyRmFjdG9yeWAgd2hpY2ggd2lsbCBwcmVzZXJ2ZSBkZWZhdWx0IGltcG9ydHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbWFya2VkXG4gICAqIGFzIHVzZWQuXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtZXIgbXVzdCBydW4gYWZ0ZXIgYW55IG90aGVyIHRyYW5zZm9ybWVycyB3aGljaCBjYWxsIGByZWNvcmRVc2VkSW1wb3J0YC5cbiAgICovXG4gIGltcG9ydFByZXNlcnZpbmdUcmFuc2Zvcm1lcigpOiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4ge1xuICAgIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gKHNmOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybVNvdXJjZUZpbGUoc2YpO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBgdHMuU291cmNlRmlsZWAgYW5kIHJlcGxhY2UgYW55IGB0cy5JbXBvcnREZWNsYXJhdGlvbmBzLlxuICAgKi9cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Tb3VyY2VGaWxlKHNmOiB0cy5Tb3VyY2VGaWxlKTogdHMuU291cmNlRmlsZSB7XG4gICAgY29uc3Qgb3JpZ2luYWxTZiA9IHRzLmdldE9yaWdpbmFsTm9kZShzZikgYXMgdHMuU291cmNlRmlsZTtcbiAgICAvLyBUYWtlIGEgZmFzdCBwYXRoIGlmIG5vIGltcG9ydCBkZWNsYXJhdGlvbnMgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgaW4gdGhlIGZpbGUuXG4gICAgaWYgKCF0aGlzLnNvdXJjZUZpbGVUb1VzZWRJbXBvcnRzLmhhcyhvcmlnaW5hbFNmKSkge1xuICAgICAgcmV0dXJuIHNmO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIGFyZSBkZWNsYXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHByZXNlcnZlZC5cbiAgICBjb25zdCBpbXBvcnRzVG9QcmVzZXJ2ZSA9IHRoaXMuc291cmNlRmlsZVRvVXNlZEltcG9ydHMuZ2V0KG9yaWdpbmFsU2YpITtcblxuICAgIC8vIEdlbmVyYXRlIGEgbmV3IHN0YXRlbWVudCBsaXN0IHdoaWNoIHByZXNlcnZlcyBhbnkgaW1wb3J0cyBwcmVzZW50IGluIGBpbXBvcnRzVG9QcmVzZXJ2ZWAuXG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHNmLnN0YXRlbWVudHMubWFwKHN0bXQgPT4ge1xuICAgICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24oc3RtdCkgJiYgaW1wb3J0c1RvUHJlc2VydmUuaGFzKHN0bXQpKSB7XG4gICAgICAgIC8vIFByZXNlcnZpbmcgYW4gaW1wb3J0IHRoYXQncyBtYXJrZWQgYXMgdW5yZWZlcmVuY2VkICh0eXBlLW9ubHkpIGlzIHRyaWNreSBpbiBUeXBlU2NyaXB0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBWYXJpb3VzIGFwcHJvYWNoZXMgaGF2ZSBiZWVuIHRyaWVkLCB3aXRoIG1peGVkIHN1Y2Nlc3M6XG4gICAgICAgIC8vXG4gICAgICAgIC8vIDEuIFVzaW5nIGB0cy51cGRhdGVJbXBvcnREZWNsYXJhdGlvbmAgZG9lcyBub3QgY2F1c2UgdGhlIGltcG9ydCB0byBiZSByZXRhaW5lZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gMi4gVXNpbmcgYHRzLmNyZWF0ZUltcG9ydERlY2xhcmF0aW9uYCB3aXRoIHRoZSBzYW1lIGB0cy5JbXBvcnRDbGF1c2VgIGNhdXNlcyB0aGUgaW1wb3J0XG4gICAgICAgIC8vICAgIHRvIGNvcnJlY3RseSBiZSByZXRhaW5lZCwgYnV0IHdoZW4gZW1pdHRpbmcgQ29tbW9uSlMgbW9kdWxlIGZvcm1hdCBjb2RlLCByZWZlcmVuY2VzXG4gICAgICAgIC8vICAgIHRvIHRoZSBpbXBvcnRlZCB2YWx1ZSB3aWxsIG5vdCBtYXRjaCB0aGUgaW1wb3J0IHZhcmlhYmxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAzLiBFbWl0dGluZyBcImltcG9ydCAqIGFzXCIgaW1wb3J0cyBpbnN0ZWFkIGdlbmVyYXRlcyB0aGUgY29ycmVjdCBpbXBvcnQgdmFyaWFibGUsIGJ1dFxuICAgICAgICAvLyAgICByZWZlcmVuY2VzIGFyZSBtaXNzaW5nIHRoZSBcIi5kZWZhdWx0XCIgYWNjZXNzLiBUaGlzIGhhcHBlbnMgdG8gd29yayBmb3IgdHNpY2tsZSBjb2RlXG4gICAgICAgIC8vICAgIHdpdGggZ29vZy5tb2R1bGUgdHJhbnNmb3JtYXRpb25zIGFzIHRzaWNrbGUgc3RyaXBzIHRoZSBcIi5kZWZhdWx0XCIgYW55d2F5LlxuICAgICAgICAvL1xuICAgICAgICAvLyA0LiBJdCdzIHBvc3NpYmxlIHRvIHRyaWNrIFR5cGVTY3JpcHQgYnkgc2V0dGluZyBgdHMuTm9kZUZsYWcuU3ludGhlc2l6ZWRgIG9uIHRoZSBpbXBvcnRcbiAgICAgICAgLy8gICAgZGVjbGFyYXRpb24uIFRoaXMgY2F1c2VzIHRoZSBpbXBvcnQgdG8gYmUgY29ycmVjdGx5IHJldGFpbmVkIGFuZCBnZW5lcmF0ZWQsIGJ1dCBjYW5cbiAgICAgICAgLy8gICAgdmlvbGF0ZSBpbnZhcmlhbnRzIGVsc2V3aGVyZSBpbiB0aGUgY29tcGlsZXIgYW5kIGNhdXNlIGNyYXNoZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDUuIFVzaW5nIGB0cy5nZXRNdXRhYmxlQ2xvbmVgIHNlZW1zIHRvIGNvcnJlY3RseSBwcmVzZXJ2ZSB0aGUgaW1wb3J0IGFuZCBjb3JyZWN0bHlcbiAgICAgICAgLy8gICAgZ2VuZXJhdGUgcmVmZXJlbmNlcyB0byB0aGUgaW1wb3J0IHZhcmlhYmxlIGFjcm9zcyBhbGwgbW9kdWxlIHR5cGVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZWZvcmUsIG9wdGlvbiA1IGlzIHRoZSBvbmUgdXNlZCBoZXJlLiBJdCBzZWVtcyB0byBiZSBpbXBsZW1lbnRlZCBhcyB0aGUgY29ycmVjdCB3YXlcbiAgICAgICAgLy8gdG8gcGVyZm9ybSBvcHRpb24gNCwgd2hpY2ggcHJlc2VydmVzIGFsbCB0aGUgY29tcGlsZXIncyBpbnZhcmlhbnRzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUT0RPKGFseGh1Yik6IGRpc2N1c3Mgd2l0aCB0aGUgVHlwZVNjcmlwdCB0ZWFtIGFuZCBkZXRlcm1pbmUgaWYgdGhlcmUncyBhIGJldHRlciB3YXkgdG9cbiAgICAgICAgLy8gZGVhbCB3aXRoIHRoaXMgaXNzdWUuXG4gICAgICAgIHN0bXQgPSB0cy5nZXRNdXRhYmxlQ2xvbmUoc3RtdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RtdDtcbiAgICB9KTtcblxuICAgIC8vIFNhdmUgbWVtb3J5IC0gdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgdGhlc2UgYXJvdW5kIG9uY2UgdGhlIHRyYW5zZm9ybSBoYXMgcnVuIGZvciB0aGUgZ2l2ZW5cbiAgICAvLyBmaWxlLlxuICAgIHRoaXMuc291cmNlRmlsZVRvVXNlZEltcG9ydHMuZGVsZXRlKG9yaWdpbmFsU2YpO1xuXG4gICAgcmV0dXJuIHRzLnVwZGF0ZVNvdXJjZUZpbGVOb2RlKHNmLCBzdGF0ZW1lbnRzKTtcbiAgfVxufVxuIl19
@@ -11,7 +11,7 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/incremental/src/state", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph", "@angular/compiler-cli/src/ngtsc/incremental/src/dependency_tracking"], factory);
14
+ define("@angular/compiler-cli/src/ngtsc/incremental/src/state", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph", "@angular/compiler-cli/src/ngtsc/incremental/src/dependency_tracking"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
@@ -20,6 +20,7 @@
20
20
  var tslib_1 = require("tslib");
21
21
  var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
22
22
  var perf_1 = require("@angular/compiler-cli/src/ngtsc/perf");
23
+ var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
23
24
  var semantic_graph_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph");
24
25
  var dependency_tracking_1 = require("@angular/compiler-cli/src/ngtsc/incremental/src/dependency_tracking");
25
26
  /**
@@ -87,12 +88,13 @@
87
88
  // since the previous compilation). These need to be removed from the state tracking to
88
89
  // avoid leaking memory.
89
90
  // All files in the old program, for easy detection of changes.
90
- var oldFiles = new Set(oldProgram.getSourceFiles());
91
+ var oldFiles = new Set(oldProgram.getSourceFiles().map(typescript_1.toUnredirectedSourceFile));
91
92
  // Assume all the old files were deleted to begin with. Only TS files are tracked.
92
93
  var deletedTsPaths = new Set(tsOnlyFiles(oldProgram).map(function (sf) { return sf.fileName; }));
93
94
  try {
94
95
  for (var _f = tslib_1.__values(newProgram.getSourceFiles()), _g = _f.next(); !_g.done; _g = _f.next()) {
95
- var newFile = _g.value;
96
+ var possiblyRedirectedNewFile = _g.value;
97
+ var newFile = typescript_1.toUnredirectedSourceFile(possiblyRedirectedNewFile);
96
98
  if (!newFile.isDeclarationFile) {
97
99
  // This file exists in the new program, so remove it from `deletedTsPaths`.
98
100
  deletedTsPaths.delete(newFile.fileName);
@@ -335,4 +337,4 @@
335
337
  return program.getSourceFiles().filter(function (sf) { return !sf.isDeclarationFile; });
336
338
  }
337
339
  });
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NyYy9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBSUgsMkVBQXVGO0lBQ3ZGLDZEQUE4RDtJQUs5RCw2RkFBNEU7SUFFNUUsMkdBQTBEO0lBRTFEOztPQUVHO0lBQ0g7UUFRRSwyQkFDSSxLQUF3QixFQUFXLFFBQTZCLEVBQ3hELGNBQWdDO1lBREwsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7WUFDeEQsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFFRDs7Ozs7O1dBTUc7UUFDSSwyQkFBUyxHQUFoQixVQUNJLFVBQXNCLEVBQUUsU0FBNEIsRUFBRSxVQUFzQixFQUM1RSxxQkFBdUMsRUFBRSxJQUFrQjtZQUM3RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQVMsQ0FBQyxjQUFjLEVBQUU7O2dCQUM1Qyx1RUFBdUU7Z0JBQ3ZFLElBQUksS0FBd0IsQ0FBQztnQkFDN0IsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO29CQUNuRCwwRkFBMEY7b0JBQzFGLGtCQUFrQjtvQkFDbEIsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNMLElBQUksVUFBVSxHQUEwQixJQUFJLENBQUM7b0JBQzdDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO3dCQUNyQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7cUJBQ3hEO29CQUVELHdGQUF3RjtvQkFDeEYsMkJBQTJC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QUhJLGNBQWMsS0FBZCxjQUFjLFFBR2xCO0lBdUhELFNBQVMsV0FBVyxDQUFDLE9BQW1CO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFyQixDQUFxQixDQUFDLENBQUM7SUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHthYnNvbHV0ZUZyb20sIGFic29sdXRlRnJvbVNvdXJjZUZpbGUsIEFic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge1BlcmZFdmVudCwgUGVyZlBoYXNlLCBQZXJmUmVjb3JkZXJ9IGZyb20gJy4uLy4uL3BlcmYnO1xuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9ufSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcbmltcG9ydCB7Q2xhc3NSZWNvcmQsIFRyYWl0Q29tcGlsZXJ9IGZyb20gJy4uLy4uL3RyYW5zZm9ybSc7XG5pbXBvcnQge0ZpbGVUeXBlQ2hlY2tpbmdEYXRhfSBmcm9tICcuLi8uLi90eXBlY2hlY2svc3JjL2NoZWNrZXInO1xuaW1wb3J0IHtJbmNyZW1lbnRhbEJ1aWxkfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtTZW1hbnRpY0RlcEdyYXBoLCBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlcn0gZnJvbSAnLi4vc2VtYW50aWNfZ3JhcGgnO1xuXG5pbXBvcnQge0ZpbGVEZXBlbmRlbmN5R3JhcGh9IGZyb20gJy4vZGVwZW5kZW5jeV90cmFja2luZyc7XG5cbi8qKlxuICogRHJpdmVzIGFuIGluY3JlbWVudGFsIGJ1aWxkLCBieSB0cmFja2luZyBjaGFuZ2VzIGFuZCBkZXRlcm1pbmluZyB3aGljaCBmaWxlcyBuZWVkIHRvIGJlIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmNyZW1lbnRhbERyaXZlciBpbXBsZW1lbnRzIEluY3JlbWVudGFsQnVpbGQ8Q2xhc3NSZWNvcmQsIEZpbGVUeXBlQ2hlY2tpbmdEYXRhPiB7XG4gIC8qKlxuICAgKiBTdGF0ZSBvZiB0aGUgY3VycmVudCBidWlsZC5cbiAgICpcbiAgICogVGhpcyB0cmFuc2l0aW9ucyBhcyB0aGUgY29tcGlsYXRpb24gcHJvZ3Jlc3Nlcy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGU6IEJ1aWxkU3RhdGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIHN0YXRlOiBQZW5kaW5nQnVpbGRTdGF0ZSwgcmVhZG9ubHkgZGVwR3JhcGg6IEZpbGVEZXBlbmRlbmN5R3JhcGgsXG4gICAgICBwcml2YXRlIGxvZ2ljYWxDaGFuZ2VzOiBTZXQ8c3RyaW5nPnxudWxsKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBgSW5jcmVtZW50YWxEcml2ZXJgIHdpdGggYSBzdGFydGluZyBzdGF0ZSB0aGF0IGluY29ycG9yYXRlcyB0aGUgcmVzdWx0cyBvZiBhXG4gICAqIHByZXZpb3VzIGJ1aWxkLlxuICAgKlxuICAgKiBUaGUgcHJldmlvdXMgYnVpbGQncyBgQnVpbGRTdGF0ZWAgaXMgcmVjb25jaWxlZCB3aXRoIHRoZSBuZXcgcHJvZ3JhbSdzIGNoYW5nZXMsIGFuZCB0aGUgcmVzdWx0c1xuICAgKiBhcmUgbWVyZ2VkIGludG8gdGhlIG5ldyBidWlsZCdzIGBQZW5kaW5nQnVpbGRTdGF0ZWAuXG4gICAqL1xuICBzdGF0aWMgcmVjb25jaWxlKFxuICAgICAgb2xkUHJvZ3JhbTogdHMuUHJvZ3JhbSwgb2xkRHJpdmVyOiBJbmNyZW1lbnRhbERyaXZlciwgbmV3UHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgICAgIG1vZGlmaWVkUmVzb3VyY2VGaWxlczogU2V0PHN0cmluZz58bnVsbCwgcGVyZjogUGVyZlJlY29yZGVyKTogSW5jcmVtZW50YWxEcml2ZXIge1xuICAgIHJldHVybiBwZXJmLmluUGhhc2UoUGVyZlBoYXNlLlJlY29uY2lsaWF0aW9uLCAoKSA9PiB7XG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBidWlsZCBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgbGV0IHN0YXRlOiBQZW5kaW5nQnVpbGRTdGF0ZTtcbiAgICAgIGlmIChvbGREcml2ZXIuc3RhdGUua2luZCA9PT0gQnVpbGRTdGF0ZUtpbmQuUGVuZGluZykge1xuICAgICAgICAvLyBUaGUgcHJldmlvdXMgYnVpbGQgbmV2ZXIgbWFkZSBpdCBwYXN0IHRoZSBwZW5kaW5nIHN0YXRlLiBSZXVzZSBpdCBhcyB0aGUgc3RhcnRpbmcgc3RhdGVcbiAgICAgICAgLy8gZm9yIHRoaXMgYnVpbGQuXG4gICAgICAgIHN0YXRlID0gb2xkRHJpdmVyLnN0YXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHByaW9yR3JhcGg6IFNlbWFudGljRGVwR3JhcGh8bnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChvbGREcml2ZXIuc3RhdGUubGFzdEdvb2QgIT09IG51bGwpIHtcbiAgICAgICAgICBwcmlvckdyYXBoID0gb2xkRHJpdmVyLnN0YXRlLmxhc3RHb29kLnNlbWFudGljRGVwR3JhcGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcHJldmlvdXMgYnVpbGQgd2FzIHN1Y2Nlc3NmdWxseSBhbmFseXplZC4gYHBlbmRpbmdFbWl0YCBpcyB0aGUgb25seSBzdGF0ZSBjYXJyaWVkXG4gICAgICAgIC8vIGZvcndhcmQgaW50byB0aGlzIGJ1aWxkLlxuICAgICAgICBzdGF0ZSA9IHtcbiAgICAgICAgICBraW5kOiBCdWlsZFN0YXRlS2luZC5QZW5kaW5nLFxuICAgICAgICAgIHBlbmRpbmdFbWl0OiBvbGREcml2ZXIuc3RhdGUucGVuZGluZ0VtaXQsXG4gICAgICAgICAgcGVuZGluZ1R5cGVDaGVja0VtaXQ6IG9sZERyaXZlci5zdGF0ZS5wZW5kaW5nVHlwZUNoZWNrRW1pdCxcbiAgICAgICAgICBjaGFuZ2VkUmVzb3VyY2VQYXRoczogbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKSxcbiAgICAgICAgICBjaGFuZ2VkVHNQYXRoczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICAgICAgbGFzdEdvb2Q6IG9sZERyaXZlci5zdGF0ZS5sYXN0R29vZCxcbiAgICAgICAgICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogbmV3IFNlbWFudGljRGVwR3JhcGhVcGRhdGVyKHByaW9yR3JhcGgpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBNZXJnZSB0aGUgZnJlc2hseSBtb2RpZmllZCByZXNvdXJjZSBmaWxlcyB3aXRoIGFueSBwcmlvciBvbmVzLlxuICAgICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VGaWxlcyAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc0ZpbGUgb2YgbW9kaWZpZWRSZXNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgc3RhdGUuY2hhbmdlZFJlc291cmNlUGF0aHMuYWRkKGFic29sdXRlRnJvbShyZXNGaWxlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTmV4dCwgcHJvY2VzcyB0aGUgZmlsZXMgaW4gdGhlIG5ldyBwcm9ncmFtLCB3aXRoIGEgY291cGxlIG9mIGdvYWxzOlxuICAgICAgLy8gMSkgRGV0ZXJtaW5lIHdoaWNoIFRTIGZpbGVzIGhhdmUgY2hhbmdlZCwgaWYgYW55LCBhbmQgbWVyZ2UgdGhlbSBpbnRvIGBjaGFuZ2VkVHNGaWxlc2AuXG4gICAgICAvLyAyKSBQcm9kdWNlIGEgbGlzdCBvZiBUUyBmaWxlcyB3aGljaCBubyBsb25nZXIgZXhpc3QgaW4gdGhlIHByb2dyYW0gKHRoZXkndmUgYmVlbiBkZWxldGVkXG4gICAgICAvLyAgICBzaW5jZSB0aGUgcHJldmlvdXMgY29tcGlsYXRpb24pLiBUaGVzZSBuZWVkIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3RhdGUgdHJhY2tpbmcgdG9cbiAgICAgIC8vICAgIGF2b2lkIGxlYWtpbmcgbWVtb3J5LlxuXG4gICAgICAvLyBBbGwgZmlsZXMgaW4gdGhlIG9sZCBwcm9ncmFtLCBmb3IgZWFzeSBkZXRlY3Rpb24gb2YgY2hhbmdlcy5cbiAgICAgIGNvbnN0IG9sZEZpbGVzID0gbmV3IFNldDx0cy5Tb3VyY2VGaWxlPihvbGRQcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpO1xuXG4gICAgICAvLyBBc3N1bWUgYWxsIHRoZSBvbGQgZmlsZXMgd2VyZSBkZWxldGVkIHRvIGJlZ2luIHdpdGguIE9ubHkgVFMgZmlsZXMgYXJlIHRyYWNrZWQuXG4gICAgICBjb25zdCBkZWxldGVkVHNQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPih0c09ubHlGaWxlcyhvbGRQcm9ncmFtKS5tYXAoc2YgPT4gc2YuZmlsZU5hbWUpKTtcblxuICAgICAgZm9yIChjb25zdCBuZXdGaWxlIG9mIG5ld1Byb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuICAgICAgICBpZiAoIW5ld0ZpbGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICAvLyBUaGlzIGZpbGUgZXhpc3RzIGluIHRoZSBuZXcgcHJvZ3JhbSwgc28gcmVtb3ZlIGl0IGZyb20gYGRlbGV0ZWRUc1BhdGhzYC5cbiAgICAgICAgICBkZWxldGVkVHNQYXRocy5kZWxldGUobmV3RmlsZS5maWxlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkRmlsZXMuaGFzKG5ld0ZpbGUpKSB7XG4gICAgICAgICAgLy8gVGhpcyBmaWxlIGhhc24ndCBjaGFuZ2VkOyBubyBuZWVkIHRvIGxvb2sgYXQgaXQgZnVydGhlci5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmaWxlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgYnVpbGQuIFRoZSBhcHByb3ByaWF0ZSByZWFjdGlvbiBkZXBlbmRzIG9uXG4gICAgICAgIC8vIHdoYXQga2luZCBvZiBmaWxlIGl0IGlzLlxuICAgICAgICBpZiAoIW5ld0ZpbGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICAvLyBJdCdzIGEgLnRzIGZpbGUsIHNvIHRyYWNrIGl0IGFzIGEgY2hhbmdlLlxuICAgICAgICAgIHN0YXRlLmNoYW5nZWRUc1BhdGhzLmFkZChuZXdGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJdCdzIGEgLmQudHMgZmlsZS4gQ3VycmVudGx5IHRoZSBjb21waWxlciBkb2VzIG5vdCBkbyBhIGdyZWF0IGpvYiBvZiB0cmFja2luZ1xuICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBvbiAuZC50cyBmaWxlcywgc28gYmFpbCBvdXQgb2YgaW5jcmVtZW50YWwgYnVpbGRzIGhlcmUgYW5kIGRvIGEgZnVsbFxuICAgICAgICAgIC8vIGJ1aWxkLiBUaGlzIHVzdWFsbHkgb25seSBoYXBwZW5zIGlmIHNvbWV0aGluZyBpbiBub2RlX21vZHVsZXMgY2hhbmdlcy5cbiAgICAgICAgICByZXR1cm4gSW5jcmVtZW50YWxEcml2ZXIuZnJlc2gobmV3UHJvZ3JhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG5leHQgc3RlcCBpcyB0byByZW1vdmUgYW55IGRlbGV0ZWQgZmlsZXMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGRlbGV0ZWRUc1BhdGhzKSB7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdFbWl0LmRlbGV0ZShmaWxlUGF0aCk7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdUeXBlQ2hlY2tFbWl0LmRlbGV0ZShmaWxlUGF0aCk7XG5cbiAgICAgICAgLy8gRXZlbiBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLCBpdCBzdGlsbCBtaWdodCBoYXZlIGJlZW5cbiAgICAgICAgLy8gY2hhbmdlZCBpbiBhIHByZXZpb3VzIG9uZSwgc28gZGVsZXRlIGl0IGZyb20gdGhlIHNldCBvZiBjaGFuZ2VkIFRTIGZpbGVzLCBqdXN0IGluIGNhc2UuXG4gICAgICAgIHN0YXRlLmNoYW5nZWRUc1BhdGhzLmRlbGV0ZShmaWxlUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHBlcmYuZXZlbnRDb3VudChQZXJmRXZlbnQuU291cmNlRmlsZVBoeXNpY2FsQ2hhbmdlLCBzdGF0ZS5jaGFuZ2VkVHNQYXRocy5zaXplKTtcblxuICAgICAgLy8gTm93LCBjaGFuZ2VkVHNQYXRocyBjb250YWlucyBwaHlzaWNhbGx5IGNoYW5nZWQgVFMgcGF0aHMuIFVzZSB0aGUgcHJldmlvdXMgcHJvZ3JhbSdzXG4gICAgICAvLyBsb2dpY2FsIGRlcGVuZGVuY3kgZ3JhcGggdG8gZGV0ZXJtaW5lIGxvZ2ljYWxseSBjaGFuZ2VkIGZpbGVzLlxuICAgICAgY29uc3QgZGVwR3JhcGggPSBuZXcgRmlsZURlcGVuZGVuY3lHcmFwaCgpO1xuXG4gICAgICAvLyBJZiBhIHByZXZpb3VzIGNvbXBpbGF0aW9uIGV4aXN0cywgdXNlIGl0cyBkZXBlbmRlbmN5IGdyYXBoIHRvIGRldGVybWluZSB0aGUgc2V0IG9mXG4gICAgICAvLyBsb2dpY2FsbHkgY2hhbmdlZCBmaWxlcy5cbiAgICAgIGxldCBsb2dpY2FsQ2hhbmdlczogU2V0PHN0cmluZz58bnVsbCA9IG51bGw7XG4gICAgICBpZiAoc3RhdGUubGFzdEdvb2QgIT09IG51bGwpIHtcbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgc2V0IG9mIGxvZ2ljYWxseSBjaGFuZ2VkIGZpbGVzLiBBdCB0aGUgc2FtZSB0aW1lLCB0aGlzIG9wZXJhdGlvbiBwb3B1bGF0ZXNcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgKGZyZXNoKSBkZXBlbmRlbmN5IGdyYXBoIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhvc2UgZmlsZXMgd2hpY2ggaGF2ZSBub3RcbiAgICAgICAgLy8gbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICAgIGxvZ2ljYWxDaGFuZ2VzID0gZGVwR3JhcGgudXBkYXRlV2l0aFBoeXNpY2FsQ2hhbmdlcyhcbiAgICAgICAgICAgIHN0YXRlLmxhc3RHb29kLmRlcEdyYXBoLCBzdGF0ZS5jaGFuZ2VkVHNQYXRocywgZGVsZXRlZFRzUGF0aHMsXG4gICAgICAgICAgICBzdGF0ZS5jaGFuZ2VkUmVzb3VyY2VQYXRocyk7XG4gICAgICAgIHBlcmYuZXZlbnRDb3VudChQZXJmRXZlbnQuU291cmNlRmlsZUxvZ2ljYWxDaGFuZ2UsIGxvZ2ljYWxDaGFuZ2VzLnNpemUpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIHN0YXRlLmNoYW5nZWRUc1BhdGhzKSB7XG4gICAgICAgICAgbG9naWNhbENoYW5nZXMuYWRkKGZpbGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBsb2dpY2FsbHkgY2hhbmdlZCBmaWxlcyBuZWVkIHRvIGJlIHJlLWVtaXR0ZWQuIE1vc3Qgb2YgdGhlIHRpbWUgdGhpcyB3b3VsZCBoYXBwZW5cbiAgICAgICAgLy8gcmVnYXJkbGVzcyBiZWNhdXNlIHRoZSBuZXcgZGVwZW5kZW5jeSBncmFwaCB3b3VsZCBfYWxzb18gaWRlbnRpZnkgdGhlIGZpbGUgYXMgc3RhbGUuXG4gICAgICAgIC8vIEhvd2V2ZXIgdGhlcmUgYXJlIGVkZ2UgY2FzZXMgc3VjaCBhcyByZW1vdmluZyBhIGNvbXBvbmVudCBmcm9tIGFuIE5nTW9kdWxlIHdpdGhvdXQgYWRkaW5nXG4gICAgICAgIC8vIGl0IHRvIGFub3RoZXIgb25lLCB3aGVyZSB0aGUgcHJldmlvdXMgZ3JhcGggaWRlbnRpZmllcyB0aGUgZmlsZSBhcyBsb2dpY2FsbHkgY2hhbmdlZCwgYnV0XG4gICAgICAgIC8vIHRoZSBuZXcgZ3JhcGggKHdoaWNoIGRvZXMgbm90IGhhdmUgdGhhdCBlZGdlKSBmYWlscyB0byBpZGVudGlmeSB0aGF0IHRoZSBmaWxlIHNob3VsZCBiZVxuICAgICAgICAvLyByZS1lbWl0dGVkLlxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBsb2dpY2FsQ2hhbmdlcykge1xuICAgICAgICAgIHN0YXRlLnBlbmRpbmdFbWl0LmFkZChjaGFuZ2UpO1xuICAgICAgICAgIHN0YXRlLnBlbmRpbmdUeXBlQ2hlY2tFbWl0LmFkZChjaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGBzdGF0ZWAgbm93IHJlZmxlY3RzIHRoZSBpbml0aWFsIHBlbmRpbmcgc3RhdGUgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uXG4gICAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsRHJpdmVyKHN0YXRlLCBkZXBHcmFwaCwgbG9naWNhbENoYW5nZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyZXNoKHByb2dyYW06IHRzLlByb2dyYW0pOiBJbmNyZW1lbnRhbERyaXZlciB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc2V0IG9mIGZpbGVzIHdoaWNoIG5lZWQgdG8gYmUgZW1pdHRlZCB0byB0aGUgc2V0IG9mIGFsbCBUUyBmaWxlcyBpbiB0aGVcbiAgICAvLyBwcm9ncmFtLlxuICAgIGNvbnN0IHRzRmlsZXMgPSB0c09ubHlGaWxlcyhwcm9ncmFtKTtcblxuICAgIGNvbnN0IHN0YXRlOiBQZW5kaW5nQnVpbGRTdGF0ZSA9IHtcbiAgICAgIGtpbmQ6IEJ1aWxkU3RhdGVLaW5kLlBlbmRpbmcsXG4gICAgICBwZW5kaW5nRW1pdDogbmV3IFNldDxzdHJpbmc+KHRzRmlsZXMubWFwKHNmID0+IHNmLmZpbGVOYW1lKSksXG4gICAgICBwZW5kaW5nVHlwZUNoZWNrRW1pdDogbmV3IFNldDxzdHJpbmc+KHRzRmlsZXMubWFwKHNmID0+IHNmLmZpbGVOYW1lKSksXG4gICAgICBjaGFuZ2VkUmVzb3VyY2VQYXRoczogbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKSxcbiAgICAgIGNoYW5nZWRUc1BhdGhzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIGxhc3RHb29kOiBudWxsLFxuICAgICAgc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI6IG5ldyBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlcigvKiBwcmlvckdyYXBoICovIG51bGwpLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsRHJpdmVyKHN0YXRlLCBuZXcgRmlsZURlcGVuZGVuY3lHcmFwaCgpLCAvKiBsb2dpY2FsQ2hhbmdlcyAqLyBudWxsKTtcbiAgfVxuXG4gIGdldFNlbWFudGljRGVwR3JhcGhVcGRhdGVyKCk6IFNlbWFudGljRGVwR3JhcGhVcGRhdGVyIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5raW5kICE9PSBCdWlsZFN0YXRlS2luZC5QZW5kaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbWFudGljIGRlcGVuZGVuY3kgdXBkYXRlciBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHBlbmRpbmcgYW5hbHlzaXMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI7XG4gIH1cblxuICByZWNvcmRTdWNjZXNzZnVsQW5hbHlzaXModHJhaXRDb21waWxlcjogVHJhaXRDb21waWxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlLmtpbmQgIT09IEJ1aWxkU3RhdGVLaW5kLlBlbmRpbmcpIHtcbiAgICAgIC8vIENoYW5nZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5jb3Jwb3JhdGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtuZWVkc0VtaXQsIG5lZWRzVHlwZUNoZWNrRW1pdCwgbmV3R3JhcGh9ID0gdGhpcy5zdGF0ZS5zZW1hbnRpY0RlcEdyYXBoVXBkYXRlci5maW5hbGl6ZSgpO1xuXG4gICAgY29uc3QgcGVuZGluZ0VtaXQgPSB0aGlzLnN0YXRlLnBlbmRpbmdFbWl0O1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBuZWVkc0VtaXQpIHtcbiAgICAgIHBlbmRpbmdFbWl0LmFkZChwYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZW5kaW5nVHlwZUNoZWNrRW1pdCA9IHRoaXMuc3RhdGUucGVuZGluZ1R5cGVDaGVja0VtaXQ7XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIG5lZWRzVHlwZUNoZWNrRW1pdCkge1xuICAgICAgcGVuZGluZ1R5cGVDaGVja0VtaXQuYWRkKHBhdGgpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgdG8gYW4gYEFuYWx5emVkQnVpbGRTdGF0ZWAuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGtpbmQ6IEJ1aWxkU3RhdGVLaW5kLkFuYWx5emVkLFxuICAgICAgcGVuZGluZ0VtaXQsXG4gICAgICBwZW5kaW5nVHlwZUNoZWNrRW1pdCxcblxuICAgICAgLy8gU2luY2UgdGhpcyBjb21waWxhdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkLCB1cGRhdGUgdGhlIFwibGFzdCBnb29kXCIgYXJ0aWZhY3RzIHRvIHRoZVxuICAgICAgLy8gb25lcyBmcm9tIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLlxuICAgICAgbGFzdEdvb2Q6IHtcbiAgICAgICAgZGVwR3JhcGg6IHRoaXMuZGVwR3JhcGgsXG4gICAgICAgIHNlbWFudGljRGVwR3JhcGg6IG5ld0dyYXBoLFxuICAgICAgICB0cmFpdENvbXBpbGVyOiB0cmFpdENvbXBpbGVyLFxuICAgICAgICB0eXBlQ2hlY2tpbmdSZXN1bHRzOiBudWxsLFxuICAgICAgfSxcblxuICAgICAgcHJpb3JUeXBlQ2hlY2tpbmdSZXN1bHRzOlxuICAgICAgICAgIHRoaXMuc3RhdGUubGFzdEdvb2QgIT09IG51bGwgPyB0aGlzLnN0YXRlLmxhc3RHb29kLnR5cGVDaGVja2luZ1Jlc3VsdHMgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICByZWNvcmRTdWNjZXNzZnVsVHlwZUNoZWNrKHJlc3VsdHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRmlsZVR5cGVDaGVja2luZ0RhdGE+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUubGFzdEdvb2QgPT09IG51bGwgfHwgdGhpcy5zdGF0ZS5raW5kICE9PSBCdWlsZFN0YXRlS2luZC5BbmFseXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLmxhc3RHb29kLnR5cGVDaGVja2luZ1Jlc3VsdHMgPSByZXN1bHRzO1xuXG4gICAgLy8gRGVsZXRlIHRoZSBmaWxlcyBmb3Igd2hpY2ggdHlwZS1jaGVjayBjb2RlIHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2V0IG9mIHBlbmRpbmcgdHlwZS1jaGVja1xuICAgIC8vIGZpbGVzLlxuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgcmVzdWx0cy5rZXlzKCkpIHtcbiAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1R5cGVDaGVja0VtaXQuZGVsZXRlKGZpbGVOYW1lKTtcbiAgICB9XG4gIH1cblxuICByZWNvcmRTdWNjZXNzZnVsRW1pdChzZjogdHMuU291cmNlRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUucGVuZGluZ0VtaXQuZGVsZXRlKHNmLmZpbGVOYW1lKTtcbiAgfVxuXG4gIHNhZmVUb1NraXBFbWl0KHNmOiB0cy5Tb3VyY2VGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnN0YXRlLnBlbmRpbmdFbWl0LmhhcyhzZi5maWxlTmFtZSk7XG4gIH1cblxuICBwcmlvcldvcmtGb3Ioc2Y6IHRzLlNvdXJjZUZpbGUpOiBDbGFzc1JlY29yZFtdfG51bGwge1xuICAgIGlmICh0aGlzLnN0YXRlLmxhc3RHb29kID09PSBudWxsIHx8IHRoaXMubG9naWNhbENoYW5nZXMgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIHByZXZpb3VzIGdvb2QgYnVpbGQsIHNvIG5vIHByaW9yIHdvcmsgZXhpc3RzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvZ2ljYWxDaGFuZ2VzLmhhcyhzZi5maWxlTmFtZSkpIHtcbiAgICAgIC8vIFByaW9yIHdvcmsgbWlnaHQgZXhpc3QsIGJ1dCB3b3VsZCBiZSBzdGFsZSBhcyB0aGUgZmlsZSBpbiBxdWVzdGlvbiBoYXMgbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJpb3Igd29yayBtaWdodCBleGlzdCwgYW5kIGlmIGl0IGRvZXMgdGhlbiBpdCdzIHVzYWJsZSFcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmxhc3RHb29kLnRyYWl0Q29tcGlsZXIucmVjb3Jkc0ZvcihzZik7XG4gICAgfVxuICB9XG5cbiAgcHJpb3JUeXBlQ2hlY2tpbmdSZXN1bHRzRm9yKHNmOiB0cy5Tb3VyY2VGaWxlKTogRmlsZVR5cGVDaGVja2luZ0RhdGF8bnVsbCB7XG4gICAgaWYgKHRoaXMuc3RhdGUua2luZCAhPT0gQnVpbGRTdGF0ZUtpbmQuQW5hbHl6ZWQgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wcmlvclR5cGVDaGVja2luZ1Jlc3VsdHMgPT09IG51bGwgfHwgdGhpcy5sb2dpY2FsQ2hhbmdlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9naWNhbENoYW5nZXMuaGFzKHNmLmZpbGVOYW1lKSB8fCB0aGlzLnN0YXRlLnBlbmRpbmdUeXBlQ2hlY2tFbWl0LmhhcyhzZi5maWxlTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVOYW1lID0gYWJzb2x1dGVGcm9tU291cmNlRmlsZShzZik7XG4gICAgaWYgKCF0aGlzLnN0YXRlLnByaW9yVHlwZUNoZWNraW5nUmVzdWx0cy5oYXMoZmlsZU5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc3RhdGUucHJpb3JUeXBlQ2hlY2tpbmdSZXN1bHRzLmdldChmaWxlTmFtZSkhO1xuICAgIGlmIChkYXRhLmhhc0lubGluZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBlbmRpbmdCdWlsZFN0YXRlfEFuYWx5emVkQnVpbGRTdGF0ZTtcblxuZW51bSBCdWlsZFN0YXRlS2luZCB7XG4gIFBlbmRpbmcsXG4gIEFuYWx5emVkLFxufVxuXG5pbnRlcmZhY2UgQmFzZUJ1aWxkU3RhdGUge1xuICBraW5kOiBCdWlsZFN0YXRlS2luZDtcblxuICAvKipcbiAgICogVGhlIGhlYXJ0IG9mIGluY3JlbWVudGFsIGJ1aWxkcy4gVGhpcyBgU2V0YCB0cmFja3MgdGhlIHNldCBvZiBmaWxlcyB3aGljaCBuZWVkIHRvIGJlIGVtaXR0ZWRcbiAgICogZHVyaW5nIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIHN0YXJ0cyBvdXQgYXMgdGhlIHNldCBvZiBmaWxlcyB3aGljaCBhcmUgc3RpbGwgcGVuZGluZyBmcm9tIHRoZSBwcmV2aW91cyBwcm9ncmFtIChvciB0aGVcbiAgICogZnVsbCBzZXQgb2YgLnRzIGZpbGVzIG9uIGEgZnJlc2ggYnVpbGQpLlxuICAgKlxuICAgKiBBZnRlciBhbmFseXNpcywgaXQncyB1cGRhdGVkIHRvIGluY2x1ZGUgYW55IGZpbGVzIHdoaWNoIG1pZ2h0IGhhdmUgY2hhbmdlZCBhbmQgbmVlZCBhIHJlLWVtaXRcbiAgICogYXMgYSByZXN1bHQgb2YgaW5jcmVtZW50YWwgY2hhbmdlcy5cbiAgICpcbiAgICogSWYgYW4gZW1pdCBoYXBwZW5zLCBhbnkgd3JpdHRlbiBmaWxlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBgU2V0YCwgYXMgdGhleSdyZSBubyBsb25nZXJcbiAgICogcGVuZGluZy5cbiAgICpcbiAgICogVGh1cywgYWZ0ZXIgY29tcGlsYXRpb24gYHBlbmRpbmdFbWl0YCBzaG91bGQgYmUgZW1wdHkgKG9uIGEgc3VjY2Vzc2Z1bCBidWlsZCkgb3IgY29udGFpbiB0aGVcbiAgICogZmlsZXMgd2hpY2ggc3RpbGwgbmVlZCB0byBiZSBlbWl0dGVkIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiAoZHVlIHRvIGVycm9ycykuXG4gICAqXG4gICAqIGBwZW5kaW5nRW1pdGAgaXMgdHJhY2tlZCBhcyBhcyBgU2V0PHN0cmluZz5gIGluc3RlYWQgb2YgYSBgU2V0PHRzLlNvdXJjZUZpbGU+YCwgYmVjYXVzZSB0aGVcbiAgICogY29udGVudHMgb2YgdGhlIGZpbGUgYXJlIG5vdCBpbXBvcnRhbnQgaGVyZSwgb25seSB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGl0XG4gICAqIG5lZWRzIHRvIGJlIGVtaXR0ZWQuIFRoZSBgc3RyaW5nYHMgaGVyZSBhcmUgVFMgZmlsZSBwYXRocy5cbiAgICpcbiAgICogU2VlIHRoZSBSRUFETUUubWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBhbGdvcml0aG0uXG4gICAqL1xuICBwZW5kaW5nRW1pdDogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gYHBlbmRpbmdFbWl0YCwgYnV0IHRoZW4gZm9yIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIGZpbGVzIGZvciB3aGljaCB0aGUgdHlwZS1jaGVja1xuICAgKiBmaWxlIHNob3VsZCBiZSByZWdlbmVyYXRlZC4gSXQgYmVoYXZlcyBpZGVudGljYWxseSB3aXRoIHJlc3BlY3QgdG8gZXJyb3JlZCBjb21waWxhdGlvbnMgYXNcbiAgICogYHBlbmRpbmdFbWl0YC5cbiAgICovXG4gIHBlbmRpbmdUeXBlQ2hlY2tFbWl0OiBTZXQ8c3RyaW5nPjtcblxuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSBsYXN0IGNvbXBpbGF0aW9uIHdoaWNoIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYW5hbHlzaXMsIGlmIGFueS5cbiAgICovXG4gIGxhc3RHb29kOiB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZnJvbSB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQgYnVpbGQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBsb2dpY2FsIGltcGFjdCBvZiBwaHlzaWNhbCBmaWxlIGNoYW5nZXMuXG4gICAgICovXG4gICAgZGVwR3JhcGg6IEZpbGVEZXBlbmRlbmN5R3JhcGg7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VtYW50aWMgZGVwZW5kZW5jeSBncmFwaCBmcm9tIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSBhbmFseXplZCBidWlsZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBwZXJmb3JtIGluLWRlcHRoIGNvbXBhcmlzb24gb2YgQW5ndWxhciBkZWNvcmF0ZWQgY2xhc3NlcywgdG8gZGV0ZXJtaW5lXG4gICAgICogd2hpY2ggZmlsZXMgaGF2ZSB0byBiZSByZS1lbWl0dGVkIGFuZC9vciByZS10eXBlLWNoZWNrZWQuXG4gICAgICovXG4gICAgc2VtYW50aWNEZXBHcmFwaDogU2VtYW50aWNEZXBHcmFwaDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgVHJhaXRDb21waWxlcmAgZnJvbSB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQgYnVpbGQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBcInByaW9yIHdvcmtcIiB3aGljaCBtaWdodCBiZSByZXVzYWJsZSBpbiB0aGlzIGNvbXBpbGF0aW9uLlxuICAgICAqL1xuICAgIHRyYWl0Q29tcGlsZXI6IFRyYWl0Q29tcGlsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIGNoZWNraW5nIHJlc3VsdHMgd2hpY2ggd2lsbCBiZSBwYXNzZWQgb250byB0aGUgbmV4dCBidWlsZC5cbiAgICAgKi9cbiAgICB0eXBlQ2hlY2tpbmdSZXN1bHRzOiBNYXA8QWJzb2x1dGVGc1BhdGgsIEZpbGVUeXBlQ2hlY2tpbmdEYXRhPnwgbnVsbDtcbiAgfXxudWxsO1xufVxuXG4vKipcbiAqIFN0YXRlIG9mIGEgYnVpbGQgYmVmb3JlIHRoZSBBbmd1bGFyIGFuYWx5c2lzIHBoYXNlIGNvbXBsZXRlcy5cbiAqL1xuaW50ZXJmYWNlIFBlbmRpbmdCdWlsZFN0YXRlIGV4dGVuZHMgQmFzZUJ1aWxkU3RhdGUge1xuICBraW5kOiBCdWlsZFN0YXRlS2luZC5QZW5kaW5nO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgZmlsZXMgd2hpY2ggYXJlIGtub3duIHRvIG5lZWQgYW4gZW1pdC5cbiAgICpcbiAgICogQmVmb3JlIHRoZSBjb21waWxlcidzIGFuYWx5c2lzIHBoYXNlIGNvbXBsZXRlcywgYHBlbmRpbmdFbWl0YCBvbmx5IGNvbnRhaW5zIGZpbGVzIHRoYXQgd2VyZVxuICAgKiBzdGlsbCBwZW5kaW5nIGFmdGVyIHRoZSBwcmV2aW91cyBidWlsZC5cbiAgICovXG4gIHBlbmRpbmdFbWl0OiBTZXQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogU2V0IG9mIFR5cGVTY3JpcHQgZmlsZSBwYXRocyB3aGljaCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGJ1aWxkLlxuICAgKi9cbiAgY2hhbmdlZFRzUGF0aHM6IFNldDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgcmVzb3VyY2UgZmlsZSBwYXRocyB3aGljaCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGJ1aWxkLlxuICAgKi9cbiAgY2hhbmdlZFJlc291cmNlUGF0aHM6IFNldDxBYnNvbHV0ZUZzUGF0aD47XG5cbiAgLyoqXG4gICAqIEluIGEgcGVuZGluZyBzdGF0ZSwgdGhlIHNlbWFudGljIGRlcGVuZGVuY3kgZ3JhcGggaXMgYXZhaWxhYmxlIHRvIHRoZSBjb21waWxhdGlvbiB0byByZWdpc3RlclxuICAgKiB0aGUgaW5jcmVtZW50YWwgc3ltYm9scyBpbnRvLlxuICAgKi9cbiAgc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI6IFNlbWFudGljRGVwR3JhcGhVcGRhdGVyO1xufVxuXG5pbnRlcmZhY2UgQW5hbHl6ZWRCdWlsZFN0YXRlIGV4dGVuZHMgQmFzZUJ1aWxkU3RhdGUge1xuICBraW5kOiBCdWlsZFN0YXRlS2luZC5BbmFseXplZDtcblxuICAvKipcbiAgICogU2V0IG9mIGZpbGVzIHdoaWNoIGFyZSBrbm93biB0byBuZWVkIGFuIGVtaXQuXG4gICAqXG4gICAqIEFmdGVyIGFuYWx5c2lzIGNvbXBsZXRlcyAodGhhdCBpcywgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHRvIGBBbmFseXplZEJ1aWxkU3RhdGVgKSwgdGhlXG4gICAqIGBwZW5kaW5nRW1pdGAgc2V0IHRha2VzIGludG8gYWNjb3VudCBhbnkgb24tZGlzayBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5XG4gICAqIGFuYWx5emVkIGJ1aWxkLlxuICAgKi9cbiAgcGVuZGluZ0VtaXQ6IFNldDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUeXBlIGNoZWNraW5nIHJlc3VsdHMgZnJvbSB0aGUgcHJldmlvdXMgY29tcGlsYXRpb24sIHdoaWNoIGNhbiBiZSByZXVzZWQgaW4gdGhpcyBvbmUuXG4gICAqL1xuICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRmlsZVR5cGVDaGVja2luZ0RhdGE+fG51bGw7XG59XG5cbmZ1bmN0aW9uIHRzT25seUZpbGVzKHByb2dyYW06IHRzLlByb2dyYW0pOiBSZWFkb25seUFycmF5PHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoc2YgPT4gIXNmLmlzRGVjbGFyYXRpb25GaWxlKTtcbn1cbiJdfQ==
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NyYy9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBSUgsMkVBQXVGO0lBQ3ZGLDZEQUE4RDtJQUk5RCxrRkFBbUU7SUFFbkUsNkZBQTRFO0lBRTVFLDJHQUEwRDtJQUUxRDs7T0FFRztJQUNIO1FBUUUsMkJBQ0ksS0FBd0IsRUFBVyxRQUE2QixFQUN4RCxjQUFnQztZQURMLGFBQVEsR0FBUixRQUFRLENBQXFCO1lBQ3hELG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtZQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBRUQ7Ozs7OztXQU1HO1FBQ0ksMkJBQVMsR0FBaEIsVUFDSSxVQUFzQixFQUFFLFNBQTRCLEVBQUUsVUFBc0IsRUFDNUUscUJBQXVDLEVBQUUsSUFBa0I7WUFDN0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFTLENBQUMsY0FBYyxFQUFFOztnQkFDNUMsdUVBQXVFO2dCQUN2RSxJQUFJLEtBQXdCLENBQUM7Z0JBQzdCLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRTtvQkFDbkQsMEZBQTBGO29CQUMxRixrQkFBa0I7b0JBQ2xCLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDTCxJQUFJLFVBQVUsR0FBMEIsSUFBSSxDQUFDO29CQUM3QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTt3QkFDckMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO3FCQUN4RDtvQkFFRCx3RkFBd0Y7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cVFDO0lBclFZLDhDQUFpQjtJQXlROUIsSUFBSyxjQUdKO0lBSEQsV0FBSyxjQUFjO1FBQ2pCLHlEQUFPLENBQUE7UUFDUCwyREFBUSxDQUFBO0lBQ1YsQ0FBQyxFQUhJLGNBQWMsS0FBZCxjQUFjLFFBR2xCO0lBdUhELFNBQVMsV0FBVyxDQUFDLE9BQW1CO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFyQixDQUFxQixDQUFDLENBQUM7SUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHthYnNvbHV0ZUZyb20sIGFic29sdXRlRnJvbVNvdXJjZUZpbGUsIEFic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge1BlcmZFdmVudCwgUGVyZlBoYXNlLCBQZXJmUmVjb3JkZXJ9IGZyb20gJy4uLy4uL3BlcmYnO1xuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9ufSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcbmltcG9ydCB7Q2xhc3NSZWNvcmQsIFRyYWl0Q29tcGlsZXJ9IGZyb20gJy4uLy4uL3RyYW5zZm9ybSc7XG5pbXBvcnQge0ZpbGVUeXBlQ2hlY2tpbmdEYXRhfSBmcm9tICcuLi8uLi90eXBlY2hlY2svc3JjL2NoZWNrZXInO1xuaW1wb3J0IHt0b1VucmVkaXJlY3RlZFNvdXJjZUZpbGV9IGZyb20gJy4uLy4uL3V0aWwvc3JjL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtJbmNyZW1lbnRhbEJ1aWxkfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtTZW1hbnRpY0RlcEdyYXBoLCBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlcn0gZnJvbSAnLi4vc2VtYW50aWNfZ3JhcGgnO1xuXG5pbXBvcnQge0ZpbGVEZXBlbmRlbmN5R3JhcGh9IGZyb20gJy4vZGVwZW5kZW5jeV90cmFja2luZyc7XG5cbi8qKlxuICogRHJpdmVzIGFuIGluY3JlbWVudGFsIGJ1aWxkLCBieSB0cmFja2luZyBjaGFuZ2VzIGFuZCBkZXRlcm1pbmluZyB3aGljaCBmaWxlcyBuZWVkIHRvIGJlIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmNyZW1lbnRhbERyaXZlciBpbXBsZW1lbnRzIEluY3JlbWVudGFsQnVpbGQ8Q2xhc3NSZWNvcmQsIEZpbGVUeXBlQ2hlY2tpbmdEYXRhPiB7XG4gIC8qKlxuICAgKiBTdGF0ZSBvZiB0aGUgY3VycmVudCBidWlsZC5cbiAgICpcbiAgICogVGhpcyB0cmFuc2l0aW9ucyBhcyB0aGUgY29tcGlsYXRpb24gcHJvZ3Jlc3Nlcy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGU6IEJ1aWxkU3RhdGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIHN0YXRlOiBQZW5kaW5nQnVpbGRTdGF0ZSwgcmVhZG9ubHkgZGVwR3JhcGg6IEZpbGVEZXBlbmRlbmN5R3JhcGgsXG4gICAgICBwcml2YXRlIGxvZ2ljYWxDaGFuZ2VzOiBTZXQ8c3RyaW5nPnxudWxsKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBgSW5jcmVtZW50YWxEcml2ZXJgIHdpdGggYSBzdGFydGluZyBzdGF0ZSB0aGF0IGluY29ycG9yYXRlcyB0aGUgcmVzdWx0cyBvZiBhXG4gICAqIHByZXZpb3VzIGJ1aWxkLlxuICAgKlxuICAgKiBUaGUgcHJldmlvdXMgYnVpbGQncyBgQnVpbGRTdGF0ZWAgaXMgcmVjb25jaWxlZCB3aXRoIHRoZSBuZXcgcHJvZ3JhbSdzIGNoYW5nZXMsIGFuZCB0aGUgcmVzdWx0c1xuICAgKiBhcmUgbWVyZ2VkIGludG8gdGhlIG5ldyBidWlsZCdzIGBQZW5kaW5nQnVpbGRTdGF0ZWAuXG4gICAqL1xuICBzdGF0aWMgcmVjb25jaWxlKFxuICAgICAgb2xkUHJvZ3JhbTogdHMuUHJvZ3JhbSwgb2xkRHJpdmVyOiBJbmNyZW1lbnRhbERyaXZlciwgbmV3UHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgICAgIG1vZGlmaWVkUmVzb3VyY2VGaWxlczogU2V0PHN0cmluZz58bnVsbCwgcGVyZjogUGVyZlJlY29yZGVyKTogSW5jcmVtZW50YWxEcml2ZXIge1xuICAgIHJldHVybiBwZXJmLmluUGhhc2UoUGVyZlBoYXNlLlJlY29uY2lsaWF0aW9uLCAoKSA9PiB7XG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBidWlsZCBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgbGV0IHN0YXRlOiBQZW5kaW5nQnVpbGRTdGF0ZTtcbiAgICAgIGlmIChvbGREcml2ZXIuc3RhdGUua2luZCA9PT0gQnVpbGRTdGF0ZUtpbmQuUGVuZGluZykge1xuICAgICAgICAvLyBUaGUgcHJldmlvdXMgYnVpbGQgbmV2ZXIgbWFkZSBpdCBwYXN0IHRoZSBwZW5kaW5nIHN0YXRlLiBSZXVzZSBpdCBhcyB0aGUgc3RhcnRpbmcgc3RhdGVcbiAgICAgICAgLy8gZm9yIHRoaXMgYnVpbGQuXG4gICAgICAgIHN0YXRlID0gb2xkRHJpdmVyLnN0YXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHByaW9yR3JhcGg6IFNlbWFudGljRGVwR3JhcGh8bnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChvbGREcml2ZXIuc3RhdGUubGFzdEdvb2QgIT09IG51bGwpIHtcbiAgICAgICAgICBwcmlvckdyYXBoID0gb2xkRHJpdmVyLnN0YXRlLmxhc3RHb29kLnNlbWFudGljRGVwR3JhcGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcHJldmlvdXMgYnVpbGQgd2FzIHN1Y2Nlc3NmdWxseSBhbmFseXplZC4gYHBlbmRpbmdFbWl0YCBpcyB0aGUgb25seSBzdGF0ZSBjYXJyaWVkXG4gICAgICAgIC8vIGZvcndhcmQgaW50byB0aGlzIGJ1aWxkLlxuICAgICAgICBzdGF0ZSA9IHtcbiAgICAgICAgICBraW5kOiBCdWlsZFN0YXRlS2luZC5QZW5kaW5nLFxuICAgICAgICAgIHBlbmRpbmdFbWl0OiBvbGREcml2ZXIuc3RhdGUucGVuZGluZ0VtaXQsXG4gICAgICAgICAgcGVuZGluZ1R5cGVDaGVja0VtaXQ6IG9sZERyaXZlci5zdGF0ZS5wZW5kaW5nVHlwZUNoZWNrRW1pdCxcbiAgICAgICAgICBjaGFuZ2VkUmVzb3VyY2VQYXRoczogbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKSxcbiAgICAgICAgICBjaGFuZ2VkVHNQYXRoczogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgICAgICAgbGFzdEdvb2Q6IG9sZERyaXZlci5zdGF0ZS5sYXN0R29vZCxcbiAgICAgICAgICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogbmV3IFNlbWFudGljRGVwR3JhcGhVcGRhdGVyKHByaW9yR3JhcGgpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBNZXJnZSB0aGUgZnJlc2hseSBtb2RpZmllZCByZXNvdXJjZSBmaWxlcyB3aXRoIGFueSBwcmlvciBvbmVzLlxuICAgICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VGaWxlcyAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc0ZpbGUgb2YgbW9kaWZpZWRSZXNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgc3RhdGUuY2hhbmdlZFJlc291cmNlUGF0aHMuYWRkKGFic29sdXRlRnJvbShyZXNGaWxlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTmV4dCwgcHJvY2VzcyB0aGUgZmlsZXMgaW4gdGhlIG5ldyBwcm9ncmFtLCB3aXRoIGEgY291cGxlIG9mIGdvYWxzOlxuICAgICAgLy8gMSkgRGV0ZXJtaW5lIHdoaWNoIFRTIGZpbGVzIGhhdmUgY2hhbmdlZCwgaWYgYW55LCBhbmQgbWVyZ2UgdGhlbSBpbnRvIGBjaGFuZ2VkVHNGaWxlc2AuXG4gICAgICAvLyAyKSBQcm9kdWNlIGEgbGlzdCBvZiBUUyBmaWxlcyB3aGljaCBubyBsb25nZXIgZXhpc3QgaW4gdGhlIHByb2dyYW0gKHRoZXkndmUgYmVlbiBkZWxldGVkXG4gICAgICAvLyAgICBzaW5jZSB0aGUgcHJldmlvdXMgY29tcGlsYXRpb24pLiBUaGVzZSBuZWVkIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3RhdGUgdHJhY2tpbmcgdG9cbiAgICAgIC8vICAgIGF2b2lkIGxlYWtpbmcgbWVtb3J5LlxuXG4gICAgICAvLyBBbGwgZmlsZXMgaW4gdGhlIG9sZCBwcm9ncmFtLCBmb3IgZWFzeSBkZXRlY3Rpb24gb2YgY2hhbmdlcy5cbiAgICAgIGNvbnN0IG9sZEZpbGVzID1cbiAgICAgICAgICBuZXcgU2V0PHRzLlNvdXJjZUZpbGU+KG9sZFByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5tYXAodG9VbnJlZGlyZWN0ZWRTb3VyY2VGaWxlKSk7XG5cbiAgICAgIC8vIEFzc3VtZSBhbGwgdGhlIG9sZCBmaWxlcyB3ZXJlIGRlbGV0ZWQgdG8gYmVnaW4gd2l0aC4gT25seSBUUyBmaWxlcyBhcmUgdHJhY2tlZC5cbiAgICAgIGNvbnN0IGRlbGV0ZWRUc1BhdGhzID0gbmV3IFNldDxzdHJpbmc+KHRzT25seUZpbGVzKG9sZFByb2dyYW0pLm1hcChzZiA9PiBzZi5maWxlTmFtZSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHBvc3NpYmx5UmVkaXJlY3RlZE5ld0ZpbGUgb2YgbmV3UHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICAgIGNvbnN0IG5ld0ZpbGUgPSB0b1VucmVkaXJlY3RlZFNvdXJjZUZpbGUocG9zc2libHlSZWRpcmVjdGVkTmV3RmlsZSk7XG4gICAgICAgIGlmICghbmV3RmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgICAgIC8vIFRoaXMgZmlsZSBleGlzdHMgaW4gdGhlIG5ldyBwcm9ncmFtLCBzbyByZW1vdmUgaXQgZnJvbSBgZGVsZXRlZFRzUGF0aHNgLlxuICAgICAgICAgIGRlbGV0ZWRUc1BhdGhzLmRlbGV0ZShuZXdGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbGRGaWxlcy5oYXMobmV3RmlsZSkpIHtcbiAgICAgICAgICAvLyBUaGlzIGZpbGUgaGFzbid0IGNoYW5nZWQ7IG5vIG5lZWQgdG8gbG9vayBhdCBpdCBmdXJ0aGVyLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZpbGUgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBidWlsZC4gVGhlIGFwcHJvcHJpYXRlIHJlYWN0aW9uIGRlcGVuZHMgb25cbiAgICAgICAgLy8gd2hhdCBraW5kIG9mIGZpbGUgaXQgaXMuXG4gICAgICAgIGlmICghbmV3RmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgICAgIC8vIEl0J3MgYSAudHMgZmlsZSwgc28gdHJhY2sgaXQgYXMgYSBjaGFuZ2UuXG4gICAgICAgICAgc3RhdGUuY2hhbmdlZFRzUGF0aHMuYWRkKG5ld0ZpbGUuZmlsZU5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEl0J3MgYSAuZC50cyBmaWxlLiBDdXJyZW50bHkgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGRvIGEgZ3JlYXQgam9iIG9mIHRyYWNraW5nXG4gICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG9uIC5kLnRzIGZpbGVzLCBzbyBiYWlsIG91dCBvZiBpbmNyZW1lbnRhbCBidWlsZHMgaGVyZSBhbmQgZG8gYSBmdWxsXG4gICAgICAgICAgLy8gYnVpbGQuIFRoaXMgdXN1YWxseSBvbmx5IGhhcHBlbnMgaWYgc29tZXRoaW5nIGluIG5vZGVfbW9kdWxlcyBjaGFuZ2VzLlxuICAgICAgICAgIHJldHVybiBJbmNyZW1lbnRhbERyaXZlci5mcmVzaChuZXdQcm9ncmFtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbmV4dCBzdGVwIGlzIHRvIHJlbW92ZSBhbnkgZGVsZXRlZCBmaWxlcyBmcm9tIHRoZSBzdGF0ZS5cbiAgICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgZGVsZXRlZFRzUGF0aHMpIHtcbiAgICAgICAgc3RhdGUucGVuZGluZ0VtaXQuZGVsZXRlKGZpbGVQYXRoKTtcbiAgICAgICAgc3RhdGUucGVuZGluZ1R5cGVDaGVja0VtaXQuZGVsZXRlKGZpbGVQYXRoKTtcblxuICAgICAgICAvLyBFdmVuIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24sIGl0IHN0aWxsIG1pZ2h0IGhhdmUgYmVlblxuICAgICAgICAvLyBjaGFuZ2VkIGluIGEgcHJldmlvdXMgb25lLCBzbyBkZWxldGUgaXQgZnJvbSB0aGUgc2V0IG9mIGNoYW5nZWQgVFMgZmlsZXMsIGp1c3QgaW4gY2FzZS5cbiAgICAgICAgc3RhdGUuY2hhbmdlZFRzUGF0aHMuZGVsZXRlKGZpbGVQYXRoKTtcbiAgICAgIH1cblxuICAgICAgcGVyZi5ldmVudENvdW50KFBlcmZFdmVudC5Tb3VyY2VGaWxlUGh5c2ljYWxDaGFuZ2UsIHN0YXRlLmNoYW5nZWRUc1BhdGhzLnNpemUpO1xuXG4gICAgICAvLyBOb3csIGNoYW5nZWRUc1BhdGhzIGNvbnRhaW5zIHBoeXNpY2FsbHkgY2hhbmdlZCBUUyBwYXRocy4gVXNlIHRoZSBwcmV2aW91cyBwcm9ncmFtJ3NcbiAgICAgIC8vIGxvZ2ljYWwgZGVwZW5kZW5jeSBncmFwaCB0byBkZXRlcm1pbmUgbG9naWNhbGx5IGNoYW5nZWQgZmlsZXMuXG4gICAgICBjb25zdCBkZXBHcmFwaCA9IG5ldyBGaWxlRGVwZW5kZW5jeUdyYXBoKCk7XG5cbiAgICAgIC8vIElmIGEgcHJldmlvdXMgY29tcGlsYXRpb24gZXhpc3RzLCB1c2UgaXRzIGRlcGVuZGVuY3kgZ3JhcGggdG8gZGV0ZXJtaW5lIHRoZSBzZXQgb2ZcbiAgICAgIC8vIGxvZ2ljYWxseSBjaGFuZ2VkIGZpbGVzLlxuICAgICAgbGV0IGxvZ2ljYWxDaGFuZ2VzOiBTZXQ8c3RyaW5nPnxudWxsID0gbnVsbDtcbiAgICAgIGlmIChzdGF0ZS5sYXN0R29vZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBFeHRyYWN0IHRoZSBzZXQgb2YgbG9naWNhbGx5IGNoYW5nZWQgZmlsZXMuIEF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgb3BlcmF0aW9uIHBvcHVsYXRlc1xuICAgICAgICAvLyB0aGUgY3VycmVudCAoZnJlc2gpIGRlcGVuZGVuY3kgZ3JhcGggd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aG9zZSBmaWxlcyB3aGljaCBoYXZlIG5vdFxuICAgICAgICAvLyBsb2dpY2FsbHkgY2hhbmdlZC5cbiAgICAgICAgbG9naWNhbENoYW5nZXMgPSBkZXBHcmFwaC51cGRhdGVXaXRoUGh5c2ljYWxDaGFuZ2VzKFxuICAgICAgICAgICAgc3RhdGUubGFzdEdvb2QuZGVwR3JhcGgsIHN0YXRlLmNoYW5nZWRUc1BhdGhzLCBkZWxldGVkVHNQYXRocyxcbiAgICAgICAgICAgIHN0YXRlLmNoYW5nZWRSZXNvdXJjZVBhdGhzKTtcbiAgICAgICAgcGVyZi5ldmVudENvdW50KFBlcmZFdmVudC5Tb3VyY2VGaWxlTG9naWNhbENoYW5nZSwgbG9naWNhbENoYW5nZXMuc2l6ZSk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2Ygc3RhdGUuY2hhbmdlZFRzUGF0aHMpIHtcbiAgICAgICAgICBsb2dpY2FsQ2hhbmdlcy5hZGQoZmlsZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW55IGxvZ2ljYWxseSBjaGFuZ2VkIGZpbGVzIG5lZWQgdG8gYmUgcmUtZW1pdHRlZC4gTW9zdCBvZiB0aGUgdGltZSB0aGlzIHdvdWxkIGhhcHBlblxuICAgICAgICAvLyByZWdhcmRsZXNzIGJlY2F1c2UgdGhlIG5ldyBkZXBlbmRlbmN5IGdyYXBoIHdvdWxkIF9hbHNvXyBpZGVudGlmeSB0aGUgZmlsZSBhcyBzdGFsZS5cbiAgICAgICAgLy8gSG93ZXZlciB0aGVyZSBhcmUgZWRnZSBjYXNlcyBzdWNoIGFzIHJlbW92aW5nIGEgY29tcG9uZW50IGZyb20gYW4gTmdNb2R1bGUgd2l0aG91dCBhZGRpbmdcbiAgICAgICAgLy8gaXQgdG8gYW5vdGhlciBvbmUsIHdoZXJlIHRoZSBwcmV2aW91cyBncmFwaCBpZGVudGlmaWVzIHRoZSBmaWxlIGFzIGxvZ2ljYWxseSBjaGFuZ2VkLCBidXRcbiAgICAgICAgLy8gdGhlIG5ldyBncmFwaCAod2hpY2ggZG9lcyBub3QgaGF2ZSB0aGF0IGVkZ2UpIGZhaWxzIHRvIGlkZW50aWZ5IHRoYXQgdGhlIGZpbGUgc2hvdWxkIGJlXG4gICAgICAgIC8vIHJlLWVtaXR0ZWQuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGxvZ2ljYWxDaGFuZ2VzKSB7XG4gICAgICAgICAgc3RhdGUucGVuZGluZ0VtaXQuYWRkKGNoYW5nZSk7XG4gICAgICAgICAgc3RhdGUucGVuZGluZ1R5cGVDaGVja0VtaXQuYWRkKGNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYHN0YXRlYCBub3cgcmVmbGVjdHMgdGhlIGluaXRpYWwgcGVuZGluZyBzdGF0ZSBvZiB0aGUgY3VycmVudCBjb21waWxhdGlvbi5cbiAgICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxEcml2ZXIoc3RhdGUsIGRlcEdyYXBoLCBsb2dpY2FsQ2hhbmdlcyk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJlc2gocHJvZ3JhbTogdHMuUHJvZ3JhbSk6IEluY3JlbWVudGFsRHJpdmVyIHtcbiAgICAvLyBJbml0aWFsaXplIHRoZSBzZXQgb2YgZmlsZXMgd2hpY2ggbmVlZCB0byBiZSBlbWl0dGVkIHRvIHRoZSBzZXQgb2YgYWxsIFRTIGZpbGVzIGluIHRoZVxuICAgIC8vIHByb2dyYW0uXG4gICAgY29uc3QgdHNGaWxlcyA9IHRzT25seUZpbGVzKHByb2dyYW0pO1xuXG4gICAgY29uc3Qgc3RhdGU6IFBlbmRpbmdCdWlsZFN0YXRlID0ge1xuICAgICAga2luZDogQnVpbGRTdGF0ZUtpbmQuUGVuZGluZyxcbiAgICAgIHBlbmRpbmdFbWl0OiBuZXcgU2V0PHN0cmluZz4odHNGaWxlcy5tYXAoc2YgPT4gc2YuZmlsZU5hbWUpKSxcbiAgICAgIHBlbmRpbmdUeXBlQ2hlY2tFbWl0OiBuZXcgU2V0PHN0cmluZz4odHNGaWxlcy5tYXAoc2YgPT4gc2YuZmlsZU5hbWUpKSxcbiAgICAgIGNoYW5nZWRSZXNvdXJjZVBhdGhzOiBuZXcgU2V0PEFic29sdXRlRnNQYXRoPigpLFxuICAgICAgY2hhbmdlZFRzUGF0aHM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgbGFzdEdvb2Q6IG51bGwsXG4gICAgICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogbmV3IFNlbWFudGljRGVwR3JhcGhVcGRhdGVyKC8qIHByaW9yR3JhcGggKi8gbnVsbCksXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxEcml2ZXIoc3RhdGUsIG5ldyBGaWxlRGVwZW5kZW5jeUdyYXBoKCksIC8qIGxvZ2ljYWxDaGFuZ2VzICovIG51bGwpO1xuICB9XG5cbiAgZ2V0U2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIoKTogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIge1xuICAgIGlmICh0aGlzLnN0YXRlLmtpbmQgIT09IEJ1aWxkU3RhdGVLaW5kLlBlbmRpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VtYW50aWMgZGVwZW5kZW5jeSB1cGRhdGVyIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gcGVuZGluZyBhbmFseXNpcycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjtcbiAgfVxuXG4gIHJlY29yZFN1Y2Nlc3NmdWxBbmFseXNpcyh0cmFpdENvbXBpbGVyOiBUcmFpdENvbXBpbGVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUua2luZCAhPT0gQnVpbGRTdGF0ZUtpbmQuUGVuZGluZykge1xuICAgICAgLy8gQ2hhbmdlcyBoYXZlIGFscmVhZHkgYmVlbiBpbmNvcnBvcmF0ZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge25lZWRzRW1pdCwgbmVlZHNUeXBlQ2hlY2tFbWl0LCBuZXdHcmFwaH0gPSB0aGlzLnN0YXRlLnNlbWFudGljRGVwR3JhcGhVcGRhdGVyLmZpbmFsaXplKCk7XG5cbiAgICBjb25zdCBwZW5kaW5nRW1pdCA9IHRoaXMuc3RhdGUucGVuZGluZ0VtaXQ7XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIG5lZWRzRW1pdCkge1xuICAgICAgcGVuZGluZ0VtaXQuYWRkKHBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBlbmRpbmdUeXBlQ2hlY2tFbWl0ID0gdGhpcy5zdGF0ZS5wZW5kaW5nVHlwZUNoZWNrRW1pdDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbmVlZHNUeXBlQ2hlY2tFbWl0KSB7XG4gICAgICBwZW5kaW5nVHlwZUNoZWNrRW1pdC5hZGQocGF0aCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSB0byBhbiBgQW5hbHl6ZWRCdWlsZFN0YXRlYC5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAga2luZDogQnVpbGRTdGF0ZUtpbmQuQW5hbHl6ZWQsXG4gICAgICBwZW5kaW5nRW1pdCxcbiAgICAgIHBlbmRpbmdUeXBlQ2hlY2tFbWl0LFxuXG4gICAgICAvLyBTaW5jZSB0aGlzIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQsIHVwZGF0ZSB0aGUgXCJsYXN0IGdvb2RcIiBhcnRpZmFjdHMgdG8gdGhlXG4gICAgICAvLyBvbmVzIGZyb20gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uXG4gICAgICBsYXN0R29vZDoge1xuICAgICAgICBkZXBHcmFwaDogdGhpcy5kZXBHcmFwaCxcbiAgICAgICAgc2VtYW50aWNEZXBHcmFwaDogbmV3R3JhcGgsXG4gICAgICAgIHRyYWl0Q29tcGlsZXI6IHRyYWl0Q29tcGlsZXIsXG4gICAgICAgIHR5cGVDaGVja2luZ1Jlc3VsdHM6IG51bGwsXG4gICAgICB9LFxuXG4gICAgICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHM6XG4gICAgICAgICAgdGhpcy5zdGF0ZS5sYXN0R29vZCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUubGFzdEdvb2QudHlwZUNoZWNraW5nUmVzdWx0cyA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHJlY29yZFN1Y2Nlc3NmdWxUeXBlQ2hlY2socmVzdWx0czogTWFwPEFic29sdXRlRnNQYXRoLCBGaWxlVHlwZUNoZWNraW5nRGF0YT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5sYXN0R29vZCA9PT0gbnVsbCB8fCB0aGlzLnN0YXRlLmtpbmQgIT09IEJ1aWxkU3RhdGVLaW5kLkFuYWx5emVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUubGFzdEdvb2QudHlwZUNoZWNraW5nUmVzdWx0cyA9IHJlc3VsdHM7XG5cbiAgICAvLyBEZWxldGUgdGhlIGZpbGVzIGZvciB3aGljaCB0eXBlLWNoZWNrIGNvZGUgd2FzIGdlbmVyYXRlZCBmcm9tIHRoZSBzZXQgb2YgcGVuZGluZyB0eXBlLWNoZWNrXG4gICAgLy8gZmlsZXMuXG4gICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiByZXN1bHRzLmtleXMoKSkge1xuICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nVHlwZUNoZWNrRW1pdC5kZWxldGUoZmlsZU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlY29yZFN1Y2Nlc3NmdWxFbWl0KHNmOiB0cy5Tb3VyY2VGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5wZW5kaW5nRW1pdC5kZWxldGUoc2YuZmlsZU5hbWUpO1xuICB9XG5cbiAgc2FmZVRvU2tpcEVtaXQoc2Y6IHRzLlNvdXJjZUZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3RhdGUucGVuZGluZ0VtaXQuaGFzKHNmLmZpbGVOYW1lKTtcbiAgfVxuXG4gIHByaW9yV29ya0ZvcihzZjogdHMuU291cmNlRmlsZSk6IENsYXNzUmVjb3JkW118bnVsbCB7XG4gICAgaWYgKHRoaXMuc3RhdGUubGFzdEdvb2QgPT09IG51bGwgfHwgdGhpcy5sb2dpY2FsQ2hhbmdlcyA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gcHJldmlvdXMgZ29vZCBidWlsZCwgc28gbm8gcHJpb3Igd29yayBleGlzdHMuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9naWNhbENoYW5nZXMuaGFzKHNmLmZpbGVOYW1lKSkge1xuICAgICAgLy8gUHJpb3Igd29yayBtaWdodCBleGlzdCwgYnV0IHdvdWxkIGJlIHN0YWxlIGFzIHRoZSBmaWxlIGluIHF1ZXN0aW9uIGhhcyBsb2dpY2FsbHkgY2hhbmdlZC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmlvciB3b3JrIG1pZ2h0IGV4aXN0LCBhbmQgaWYgaXQgZG9lcyB0aGVuIGl0J3MgdXNhYmxlIVxuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUubGFzdEdvb2QudHJhaXRDb21waWxlci5yZWNvcmRzRm9yKHNmKTtcbiAgICB9XG4gIH1cblxuICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHNGb3Ioc2Y6IHRzLlNvdXJjZUZpbGUpOiBGaWxlVHlwZUNoZWNraW5nRGF0YXxudWxsIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5raW5kICE9PSBCdWlsZFN0YXRlS2luZC5BbmFseXplZCB8fFxuICAgICAgICB0aGlzLnN0YXRlLnByaW9yVHlwZUNoZWNraW5nUmVzdWx0cyA9PT0gbnVsbCB8fCB0aGlzLmxvZ2ljYWxDaGFuZ2VzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dpY2FsQ2hhbmdlcy5oYXMoc2YuZmlsZU5hbWUpIHx8IHRoaXMuc3RhdGUucGVuZGluZ1R5cGVDaGVja0VtaXQuaGFzKHNmLmZpbGVOYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZU5hbWUgPSBhYnNvbHV0ZUZyb21Tb3VyY2VGaWxlKHNmKTtcbiAgICBpZiAoIXRoaXMuc3RhdGUucHJpb3JUeXBlQ2hlY2tpbmdSZXN1bHRzLmhhcyhmaWxlTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gdGhpcy5zdGF0ZS5wcmlvclR5cGVDaGVja2luZ1Jlc3VsdHMuZ2V0KGZpbGVOYW1lKSE7XG4gICAgaWYgKGRhdGEuaGFzSW5saW5lcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxudHlwZSBCdWlsZFN0YXRlID0gUGVuZGluZ0J1aWxkU3RhdGV8QW5hbHl6ZWRCdWlsZFN0YXRlO1xuXG5lbnVtIEJ1aWxkU3RhdGVLaW5kIHtcbiAgUGVuZGluZyxcbiAgQW5hbHl6ZWQsXG59XG5cbmludGVyZmFjZSBCYXNlQnVpbGRTdGF0ZSB7XG4gIGtpbmQ6IEJ1aWxkU3RhdGVLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhcnQgb2YgaW5jcmVtZW50YWwgYnVpbGRzLiBUaGlzIGBTZXRgIHRyYWNrcyB0aGUgc2V0IG9mIGZpbGVzIHdoaWNoIG5lZWQgdG8gYmUgZW1pdHRlZFxuICAgKiBkdXJpbmcgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uXG4gICAqXG4gICAqIFRoaXMgc3RhcnRzIG91dCBhcyB0aGUgc2V0IG9mIGZpbGVzIHdoaWNoIGFyZSBzdGlsbCBwZW5kaW5nIGZyb20gdGhlIHByZXZpb3VzIHByb2dyYW0gKG9yIHRoZVxuICAgKiBmdWxsIHNldCBvZiAudHMgZmlsZXMgb24gYSBmcmVzaCBidWlsZCkuXG4gICAqXG4gICAqIEFmdGVyIGFuYWx5c2lzLCBpdCdzIHVwZGF0ZWQgdG8gaW5jbHVkZSBhbnkgZmlsZXMgd2hpY2ggbWlnaHQgaGF2ZSBjaGFuZ2VkIGFuZCBuZWVkIGEgcmUtZW1pdFxuICAgKiBhcyBhIHJlc3VsdCBvZiBpbmNyZW1lbnRhbCBjaGFuZ2VzLlxuICAgKlxuICAgKiBJZiBhbiBlbWl0IGhhcHBlbnMsIGFueSB3cml0dGVuIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGBTZXRgLCBhcyB0aGV5J3JlIG5vIGxvbmdlclxuICAgKiBwZW5kaW5nLlxuICAgKlxuICAgKiBUaHVzLCBhZnRlciBjb21waWxhdGlvbiBgcGVuZGluZ0VtaXRgIHNob3VsZCBiZSBlbXB0eSAob24gYSBzdWNjZXNzZnVsIGJ1aWxkKSBvciBjb250YWluIHRoZVxuICAgKiBmaWxlcyB3aGljaCBzdGlsbCBuZWVkIHRvIGJlIGVtaXR0ZWQgYnV0IGhhdmUgbm90IHlldCBiZWVuIChkdWUgdG8gZXJyb3JzKS5cbiAgICpcbiAgICogYHBlbmRpbmdFbWl0YCBpcyB0cmFja2VkIGFzIGFzIGBTZXQ8c3RyaW5nPmAgaW5zdGVhZCBvZiBhIGBTZXQ8dHMuU291cmNlRmlsZT5gLCBiZWNhdXNlIHRoZVxuICAgKiBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgbm90IGltcG9ydGFudCBoZXJlLCBvbmx5IHdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgaXRcbiAgICogbmVlZHMgdG8gYmUgZW1pdHRlZC4gVGhlIGBzdHJpbmdgcyBoZXJlIGFyZSBUUyBmaWxlIHBhdGhzLlxuICAgKlxuICAgKiBTZWUgdGhlIFJFQURNRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGFsZ29yaXRobS5cbiAgICovXG4gIHBlbmRpbmdFbWl0OiBTZXQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogU2ltaWxhciB0byBgcGVuZGluZ0VtaXRgLCBidXQgdGhlbiBmb3IgcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgZmlsZXMgZm9yIHdoaWNoIHRoZSB0eXBlLWNoZWNrXG4gICAqIGZpbGUgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLiBJdCBiZWhhdmVzIGlkZW50aWNhbGx5IHdpdGggcmVzcGVjdCB0byBlcnJvcmVkIGNvbXBpbGF0aW9ucyBhc1xuICAgKiBgcGVuZGluZ0VtaXRgLlxuICAgKi9cbiAgcGVuZGluZ1R5cGVDaGVja0VtaXQ6IFNldDxzdHJpbmc+O1xuXG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGFzcGVjdHMgb2YgdGhlIGxhc3QgY29tcGlsYXRpb24gd2hpY2ggc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBhbmFseXNpcywgaWYgYW55LlxuICAgKi9cbiAgbGFzdEdvb2Q6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVwZW5kZW5jeSBncmFwaCBmcm9tIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSBhbmFseXplZCBidWlsZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxvZ2ljYWwgaW1wYWN0IG9mIHBoeXNpY2FsIGZpbGUgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBkZXBHcmFwaDogRmlsZURlcGVuZGVuY3lHcmFwaDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzZW1hbnRpYyBkZXBlbmRlbmN5IGdyYXBoIGZyb20gdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGFuYWx5emVkIGJ1aWxkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIHBlcmZvcm0gaW4tZGVwdGggY29tcGFyaXNvbiBvZiBBbmd1bGFyIGRlY29yYXRlZCBjbGFzc2VzLCB0byBkZXRlcm1pbmVcbiAgICAgKiB3aGljaCBmaWxlcyBoYXZlIHRvIGJlIHJlLWVtaXR0ZWQgYW5kL29yIHJlLXR5cGUtY2hlY2tlZC5cbiAgICAgKi9cbiAgICBzZW1hbnRpY0RlcEdyYXBoOiBTZW1hbnRpY0RlcEdyYXBoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBUcmFpdENvbXBpbGVyYCBmcm9tIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSBhbmFseXplZCBidWlsZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IFwicHJpb3Igd29ya1wiIHdoaWNoIG1pZ2h0IGJlIHJldXNhYmxlIGluIHRoaXMgY29tcGlsYXRpb24uXG4gICAgICovXG4gICAgdHJhaXRDb21waWxlcjogVHJhaXRDb21waWxlcjtcblxuICAgIC8qKlxuICAgICAqIFR5cGUgY2hlY2tpbmcgcmVzdWx0cyB3aGljaCB3aWxsIGJlIHBhc3NlZCBvbnRvIHRoZSBuZXh0IGJ1aWxkLlxuICAgICAqL1xuICAgIHR5cGVDaGVja2luZ1Jlc3VsdHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRmlsZVR5cGVDaGVja2luZ0RhdGE+fCBudWxsO1xuICB9fG51bGw7XG59XG5cbi8qKlxuICogU3RhdGUgb2YgYSBidWlsZCBiZWZvcmUgdGhlIEFuZ3VsYXIgYW5hbHlzaXMgcGhhc2UgY29tcGxldGVzLlxuICovXG5pbnRlcmZhY2UgUGVuZGluZ0J1aWxkU3RhdGUgZXh0ZW5kcyBCYXNlQnVpbGRTdGF0ZSB7XG4gIGtpbmQ6IEJ1aWxkU3RhdGVLaW5kLlBlbmRpbmc7XG5cbiAgLyoqXG4gICAqIFNldCBvZiBmaWxlcyB3aGljaCBhcmUga25vd24gdG8gbmVlZCBhbiBlbWl0LlxuICAgKlxuICAgKiBCZWZvcmUgdGhlIGNvbXBpbGVyJ3MgYW5hbHlzaXMgcGhhc2UgY29tcGxldGVzLCBgcGVuZGluZ0VtaXRgIG9ubHkgY29udGFpbnMgZmlsZXMgdGhhdCB3ZXJlXG4gICAqIHN0aWxsIHBlbmRpbmcgYWZ0ZXIgdGhlIHByZXZpb3VzIGJ1aWxkLlxuICAgKi9cbiAgcGVuZGluZ0VtaXQ6IFNldDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgVHlwZVNjcmlwdCBmaWxlIHBhdGhzIHdoaWNoIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQgYnVpbGQuXG4gICAqL1xuICBjaGFuZ2VkVHNQYXRoczogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldCBvZiByZXNvdXJjZSBmaWxlIHBhdGhzIHdoaWNoIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQgYnVpbGQuXG4gICAqL1xuICBjaGFuZ2VkUmVzb3VyY2VQYXRoczogU2V0PEFic29sdXRlRnNQYXRoPjtcblxuICAvKipcbiAgICogSW4gYSBwZW5kaW5nIHN0YXRlLCB0aGUgc2VtYW50aWMgZGVwZW5kZW5jeSBncmFwaCBpcyBhdmFpbGFibGUgdG8gdGhlIGNvbXBpbGF0aW9uIHRvIHJlZ2lzdGVyXG4gICAqIHRoZSBpbmNyZW1lbnRhbCBzeW1ib2xzIGludG8uXG4gICAqL1xuICBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI7XG59XG5cbmludGVyZmFjZSBBbmFseXplZEJ1aWxkU3RhdGUgZXh0ZW5kcyBCYXNlQnVpbGRTdGF0ZSB7XG4gIGtpbmQ6IEJ1aWxkU3RhdGVLaW5kLkFuYWx5emVkO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgZmlsZXMgd2hpY2ggYXJlIGtub3duIHRvIG5lZWQgYW4gZW1pdC5cbiAgICpcbiAgICogQWZ0ZXIgYW5hbHlzaXMgY29tcGxldGVzICh0aGF0IGlzLCB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgdG8gYEFuYWx5emVkQnVpbGRTdGF0ZWApLCB0aGVcbiAgICogYHBlbmRpbmdFbWl0YCBzZXQgdGFrZXMgaW50byBhY2NvdW50IGFueSBvbi1kaXNrIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBzdWNjZXNzZnVsbHlcbiAgICogYW5hbHl6ZWQgYnVpbGQuXG4gICAqL1xuICBwZW5kaW5nRW1pdDogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFR5cGUgY2hlY2tpbmcgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbiwgd2hpY2ggY2FuIGJlIHJldXNlZCBpbiB0aGlzIG9uZS5cbiAgICovXG4gIHByaW9yVHlwZUNoZWNraW5nUmVzdWx0czogTWFwPEFic29sdXRlRnNQYXRoLCBGaWxlVHlwZUNoZWNraW5nRGF0YT58bnVsbDtcbn1cblxuZnVuY3Rpb24gdHNPbmx5RmlsZXMocHJvZ3JhbTogdHMuUHJvZ3JhbSk6IFJlYWRvbmx5QXJyYXk8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLmZpbHRlcihzZiA9PiAhc2YuaXNEZWNsYXJhdGlvbkZpbGUpO1xufVxuIl19