breeze-client 2.1.5 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -1
  2. package/breeze-client.metadata.json +1 -1
  3. package/bundles/breeze-client-adapter-data-service-odata.umd.js +4 -0
  4. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -1
  5. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +1 -1
  6. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -1
  7. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +8 -1
  8. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -1
  9. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +1 -1
  10. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -1
  11. package/bundles/breeze-client.umd.js +103 -20
  12. package/bundles/breeze-client.umd.js.map +1 -1
  13. package/bundles/breeze-client.umd.min.js +1 -1
  14. package/bundles/breeze-client.umd.min.js.map +1 -1
  15. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
  16. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
  17. package/esm2015/src/abstract-data-service-adapter.js +1 -1
  18. package/esm2015/src/core.js +14 -9
  19. package/esm2015/src/data-type.js +60 -1
  20. package/esm2015/src/entity-action.js +1 -1
  21. package/esm2015/src/entity-aspect.js +6 -8
  22. package/esm2015/src/entity-manager.js +1 -1
  23. package/esm2015/src/entity-metadata.js +1 -1
  24. package/esm2015/src/entity-query.js +1 -1
  25. package/esm2015/src/entity-state.js +9 -1
  26. package/esm2015/src/enum.js +1 -1
  27. package/esm2015/src/key-generator.js +1 -1
  28. package/esm2015/src/mapping-context.js +9 -3
  29. package/esm2015/src/predicate.js +12 -5
  30. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
  31. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
  32. package/esm5/src/abstract-data-service-adapter.js +1 -1
  33. package/esm5/src/core.js +13 -8
  34. package/esm5/src/data-type.js +60 -1
  35. package/esm5/src/entity-action.js +1 -1
  36. package/esm5/src/entity-aspect.js +6 -8
  37. package/esm5/src/entity-manager.js +1 -1
  38. package/esm5/src/entity-metadata.js +1 -1
  39. package/esm5/src/entity-query.js +1 -1
  40. package/esm5/src/entity-state.js +9 -1
  41. package/esm5/src/enum.js +1 -1
  42. package/esm5/src/key-generator.js +1 -1
  43. package/esm5/src/mapping-context.js +9 -3
  44. package/esm5/src/predicate.js +12 -5
  45. package/fesm2015/breeze-client-adapter-data-service-odata.js +4 -0
  46. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -1
  47. package/fesm2015/breeze-client-adapter-data-service-webapi.js +9 -2
  48. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -1
  49. package/fesm2015/breeze-client.js +104 -21
  50. package/fesm2015/breeze-client.js.map +1 -1
  51. package/fesm5/breeze-client-adapter-data-service-odata.js +4 -0
  52. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -1
  53. package/fesm5/breeze-client-adapter-data-service-webapi.js +9 -2
  54. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -1
  55. package/fesm5/breeze-client.js +103 -20
  56. package/fesm5/breeze-client.js.map +1 -1
  57. package/package.json +1 -1
  58. package/src/abstract-data-service-adapter.d.ts +0 -1
  59. package/src/data-type.d.ts +5 -0
  60. package/src/entity-aspect.d.ts +5 -5
  61. package/src/entity-manager.d.ts +4 -4
  62. package/src/entity-metadata.d.ts +37 -27
  63. package/src/entity-state.d.ts +4 -0
  64. package/src/mapping-context.d.ts +1 -1
  65. package/src/predicate.d.ts +4 -7
@@ -105,4 +105,4 @@ export class KeyGenerator {
105
105
  }
106
106
  }
107
107
  config.registerType(KeyGenerator, "KeyGenerator");
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMva2V5LWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFZbEM7O0lBRUk7QUFDSixNQUFNLE9BQU8sWUFBWTtJQUt2QjtRQUNFLHNFQUFzRTtRQUN0RSxtREFBbUQ7UUFDbkQsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bd0JFO0lBQ0Ysb0JBQW9CLENBQUMsVUFBc0IsRUFBRSxZQUFzQjtRQUNqRSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3hDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBVyxDQUFDO1FBQ2hCLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtnQkFDOUMsTUFBTSxHQUFHLFlBQVksQ0FBQzthQUN2QjtTQUNGO1FBRUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDaEMsSUFBSSxTQUFTLEdBQUksUUFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDMUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekIsOEZBQThGO2dCQUM5RixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO29CQUNsRCxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQjthQUNGO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixDQUFDLENBQUM7YUFDNUc7U0FDRjtRQUVELFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxPQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUM5QixxQkFBcUI7UUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQy9CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUN0Qyx5Q0FBeUM7WUFDekMscUJBQXFCO1lBQ3JCLEtBQUssSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFHRCxrRUFBa0U7SUFFbEUsU0FBUyxDQUFDLFNBQW9CO1FBQzVCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ2xELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHdCQUF3QjtJQUNoQixhQUFhLENBQUMsT0FBcUIsRUFBRSxlQUFlLEdBQUcsS0FBSztRQUNsRSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUN4RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxJQUFJLGVBQWUsRUFBRTtnQkFDbkIsU0FBUyxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUF3QixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDckcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDbEM7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FFRjtBQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSwgRGF0YVByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuL2VudGl0eS1rZXknO1xyXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgSVByb3BFbnRyeSB7XHJcbiAgZW50aXR5VHlwZTogRW50aXR5VHlwZTtcclxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBrZXlNYXA6IE9iamVjdDtcclxufVxyXG5cclxuaW50ZXJmYWNlIElUZW1wSWRNYXAge1xyXG4gIFtpbmRleDogc3RyaW5nXTogSVByb3BFbnRyeTtcclxufVxyXG5cclxuLypcclxuICBAY2xhc3MgS2V5R2VuZXJhdG9yXHJcbiAgKi9cclxuZXhwb3J0IGNsYXNzIEtleUdlbmVyYXRvciB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgcHJpdmF0ZSBfdGVtcElkTWFwOiBJVGVtcElkTWFwO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyBrZXkgaXMgZGF0YVByb3BlcnR5Lm5hbWUgKyB8fCArIGVudGl0eVR5cGUubmFtZSwgdmFsdWUgaXMgcHJvcEVudHJ5XHJcbiAgICAvLyBwcm9wRW50cnkgPSB7IGVudGl0eVR5cGUsIHByb3BlcnR5TmFtZSwga2V5TWFwIH1cclxuICAgIC8vIGtleU1hcCBoYXMga2V5IG9mIHRoZSBhY3R1YWwgdmFsdWUgKCBhcyBhIHN0cmluZykgYW5kIGEgdmFsdWUgb2YgbnVsbCBvciB0aGUgcmVhbCBpZC5cclxuICAgIHRoaXMuX3RlbXBJZE1hcCA9IHt9O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgUmV0dXJucyBhIHVuaXF1ZSAndGVtcG9yYXJ5JyBpZCBmb3IgdGhlIHNwZWNpZmllZCBbW0VudGl0eVR5cGVdXS5cclxuICBVbmlxdWVuZXNzIGlzIGRlZmluZWQgZm9yIHRoaXMgcHVycG9zZSBhcyBiZWluZyB1bmlxdWUgd2l0aGluIGVhY2ggaW5zdGFuY2Ugb2YgYSBLZXlHZW5lcmF0b3IuIFRoaXMgaXMgc3VmZmljaWVudFxyXG4gIGJlY2F1c2UgZWFjaCBFbnRpdHlNYW5hZ2VyIHdpbGwgaGF2ZSBpdHMgb3duIGluc3RhbmNlIG9mIGEgS2V5R2VuZXJhdG9yIGFuZCBhbnkgZW50aXRpZXMgaW1wb3J0ZWQgaW50b1xyXG4gIHRoZSBFbnRpdHlNYW5hZ2VyIHdpdGggdGVtcG9yYXJ5IGtleXMgd2lsbCBoYXZlIHRoZW0gcmVnZW5lcmF0ZWQgYW5kIHJlbWFwcGVkIG9uIGltcG9ydC5cclxuXHJcbiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIG1ldGhvZCBtdXN0IGJlIG9mIHRoZSBjb3JyZWN0IHR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUga2V5UHJvcGVydGllcyBvZiB0aGVcclxuICBzcGVjaWZpZWQgRW50aXR5VHlwZVxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyXHJcbiAgICAgIGxldCBjdXN0VHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgbGV0IGN1c3QxID0gY3VzdFR5cGUuY3JlYXRlRW50aXR5KCk7XHJcbiAgICAgIC8vIG5leHQgbGluZSBib3RoIHNldHMgY3VzdDEncyAnQ3VzdG9tZXJJZCcgcHJvcGVydHkgYnV0IGFsc28gcmV0dXJucyB0aGUgdmFsdWVcclxuICAgICAgbGV0IGNpZDEgPSBlbTEuZ2VuZXJhdGVUZW1wS2V5VmFsdWUoY3VzdDEpO1xyXG4gICAgICBlbTEuc2F2ZUNoYW5nZXMoKS50aGVuKCBmdW5jdGlvbiggZGF0YSkge1xyXG4gICAgICAgIGxldCBzYW1lQ3VzdDEgPSBkYXRhLnJlc3VsdHNbMF07XHJcbiAgICAgICAgLy8gY3VzdDEgPT09IHNhbWVDdXN0MTtcclxuICAgICAgICAvLyBidXQgY3VzdDEuZ2V0UHJvcGVydHkoXCJDdXN0b21lcklkXCIpICE9IGNpZDFcclxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBzZXJ2ZXIgd2lsbCBoYXZlIGdlbmVyYXRlZCBhIG5ldyBpZFxyXG4gICAgICAgIC8vIGFuZCB0aGUgY2xpZW50IHdpbGwgaGF2ZSBiZWVuIHVwZGF0ZWQgd2l0aCB0aGlzXHJcbiAgICAgICAgLy8gbmV3IGlkLlxyXG4gICAgICB9KTtcclxuICBAbWV0aG9kIGdlbmVyYXRlVGVtcEtleVZhbHVlXHJcbiAgQHBhcmFtIGVudGl0eVR5cGUge0VudGl0eVR5cGV9XHJcbiAgKi9cclxuICBnZW5lcmF0ZVRlbXBLZXlWYWx1ZShlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB2YWx1ZUlmQXZhaWw/OiBib29sZWFuKSB7XHJcbiAgICBsZXQga2V5UHJvcHMgPSBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgICBpZiAoa2V5UHJvcHMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJZHMgY2FuIG5vdCBiZSBhdXRvZ2VuZXJhdGVkIGZvciBlbnRpdGllcyB3aXRoIG11bHRpcGFydCBrZXlzXCIpO1xyXG4gICAgfVxyXG4gICAgbGV0IGtleVByb3AgPSBrZXlQcm9wc1swXTtcclxuICAgIGxldCBwcm9wRW50cnkgPSB0aGlzLl9nZXRQcm9wRW50cnkoa2V5UHJvcCwgdHJ1ZSk7XHJcbiAgICBsZXQgbmV4dElkOiBhbnk7XHJcbiAgICBpZiAodmFsdWVJZkF2YWlsICE9IG51bGwpIHtcclxuICAgICAgaWYgKCFwcm9wRW50cnkua2V5TWFwW3ZhbHVlSWZBdmFpbC50b1N0cmluZygpXSkge1xyXG4gICAgICAgIG5leHRJZCA9IHZhbHVlSWZBdmFpbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgZGF0YVR5cGUgPSBrZXlQcm9wLmRhdGFUeXBlO1xyXG4gICAgICBsZXQgZ2V0TmV4dEZuID0gKGRhdGFUeXBlIGFzIGFueSkuZ2V0TmV4dDtcclxuICAgICAgaWYgKGdldE5leHRGbikge1xyXG4gICAgICAgIG5leHRJZCA9IGdldE5leHRGbih0aGlzKTtcclxuICAgICAgICAvLyBuZWVkIHRvIHdhdGNoIG91dCBmb3IgY29sbGlzaW9uIHdpdGggcHJldmlvdXNseSBpbXBvcnRlZCBpZHMgdGhhdCBtaWdodCBhbHNvIGdldCBnZW5lcmF0ZWQuXHJcbiAgICAgICAgd2hpbGUgKHByb3BFbnRyeS5rZXlNYXBbbmV4dElkLnRvU3RyaW5nKCldICE9IG51bGwpIHtcclxuICAgICAgICAgIG5leHRJZCA9IGdldE5leHRGbih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBhIHByb3BlcnR5IHdpdGggYSBkYXRhVHlwZSBvZjogXCIgKyBkYXRhVHlwZS50b1N0cmluZygpICsgXCIgZm9yIGlkIGdlbmVyYXRpb25cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm9wRW50cnkua2V5TWFwW25leHRJZC50b1N0cmluZygpXSA9IHRydWU7XHJcbiAgICByZXR1cm4gbmV4dElkO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcEtleXMoKSB7XHJcbiAgICBsZXQgcmVzdWx0czogRW50aXR5S2V5W10gPSBbXTtcclxuICAgIC8vbm9pbnNwZWN0aW9uIEpTSGludFxyXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuX3RlbXBJZE1hcCkge1xyXG4gICAgICBsZXQgcHJvcEVudHJ5ID0gdGhpcy5fdGVtcElkTWFwW2tleV07XHJcbiAgICAgIGxldCBlbnRpdHlUeXBlID0gcHJvcEVudHJ5LmVudGl0eVR5cGU7XHJcbiAgICAgIC8vIGxldCBwcm9wTmFtZSA9IHByb3BFbnRyeS5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgIC8vbm9pbnNwZWN0aW9uIEpTSGludFxyXG4gICAgICBmb3IgKGxldCBrZXlWYWx1ZSBpbiBwcm9wRW50cnkua2V5TWFwKSB7XHJcbiAgICAgICAgcmVzdWx0cy5wdXNoKG5ldyBFbnRpdHlLZXkoZW50aXR5VHlwZSwgW2tleVZhbHVlXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG5cclxuICAvLyBwcm90byBtZXRob2RzIGJlbG93IGFyZSBub3QgcGFydCBvZiB0aGUgS2V5R2VuZXJhdG9yIGludGVyZmFjZS5cclxuXHJcbiAgaXNUZW1wS2V5KGVudGl0eUtleTogRW50aXR5S2V5KSB7XHJcbiAgICBsZXQga2V5UHJvcHMgPSBlbnRpdHlLZXkuZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gICAgaWYgKGtleVByb3BzLmxlbmd0aCA+IDEpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBrZXlQcm9wID0ga2V5UHJvcHNbMF07XHJcbiAgICBsZXQgcHJvcEVudHJ5ID0gdGhpcy5fZ2V0UHJvcEVudHJ5KGtleVByb3ApO1xyXG4gICAgaWYgKCFwcm9wRW50cnkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChwcm9wRW50cnkua2V5TWFwW2VudGl0eUtleS52YWx1ZXNbMF0udG9TdHJpbmcoKV0gIT09IHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBwcml2YXRlIF9nZXRQcm9wRW50cnkoa2V5UHJvcDogRGF0YVByb3BlcnR5LCBjcmVhdGVJZk1pc3NpbmcgPSBmYWxzZSkge1xyXG4gICAgbGV0IGtleSA9IGtleVByb3AubmFtZSArIFwiLi5cIiArIGtleVByb3AucGFyZW50VHlwZS5uYW1lO1xyXG4gICAgbGV0IHByb3BFbnRyeSA9IHRoaXMuX3RlbXBJZE1hcFtrZXldO1xyXG4gICAgaWYgKCFwcm9wRW50cnkpIHtcclxuICAgICAgaWYgKGNyZWF0ZUlmTWlzc2luZykge1xyXG4gICAgICAgIHByb3BFbnRyeSA9IHsgZW50aXR5VHlwZToga2V5UHJvcC5wYXJlbnRUeXBlIGFzIEVudGl0eVR5cGUsIHByb3BlcnR5TmFtZToga2V5UHJvcC5uYW1lLCBrZXlNYXA6IHt9IH07XHJcbiAgICAgICAgdGhpcy5fdGVtcElkTWFwW2tleV0gPSBwcm9wRW50cnk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wRW50cnk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuY29uZmlnLnJlZ2lzdGVyVHlwZShLZXlHZW5lcmF0b3IsIFwiS2V5R2VuZXJhdG9yXCIpO1xyXG5cclxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMva2V5LWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFZbEM7O0lBRUk7QUFDSixNQUFNLE9BQU8sWUFBWTtJQUt2QjtRQUNFLHNFQUFzRTtRQUN0RSxtREFBbUQ7UUFDbkQsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bd0JFO0lBQ0Ysb0JBQW9CLENBQUMsVUFBc0IsRUFBRSxZQUFzQjtRQUNqRSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3hDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBVyxDQUFDO1FBQ2hCLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtnQkFDOUMsTUFBTSxHQUFHLFlBQVksQ0FBQzthQUN2QjtTQUNGO1FBRUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDaEMsSUFBSSxTQUFTLEdBQUksUUFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDMUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekIsOEZBQThGO2dCQUM5RixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO29CQUNsRCxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQjthQUNGO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixDQUFDLENBQUM7YUFDNUc7U0FDRjtRQUVELFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxPQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUM5QixxQkFBcUI7UUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQy9CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUN0Qyx5Q0FBeUM7WUFDekMscUJBQXFCO1lBQ3JCLEtBQUssSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFHRCxrRUFBa0U7SUFFbEUsU0FBUyxDQUFDLFNBQW9CO1FBQzVCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ2xELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHdCQUF3QjtJQUNoQixhQUFhLENBQUMsT0FBcUIsRUFBRSxlQUFlLEdBQUcsS0FBSztRQUNsRSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUN4RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxJQUFJLGVBQWUsRUFBRTtnQkFDbkIsU0FBUyxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUF3QixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDckcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDbEM7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FFRjtBQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSwgRGF0YVByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuL2VudGl0eS1rZXknO1xyXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgSVByb3BFbnRyeSB7XHJcbiAgZW50aXR5VHlwZTogRW50aXR5VHlwZTtcclxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBrZXlNYXA6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVGVtcElkTWFwIHtcclxuICBbaW5kZXg6IHN0cmluZ106IElQcm9wRW50cnk7XHJcbn1cclxuXHJcbi8qXHJcbiAgQGNsYXNzIEtleUdlbmVyYXRvclxyXG4gICovXHJcbmV4cG9ydCBjbGFzcyBLZXlHZW5lcmF0b3Ige1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgX3RlbXBJZE1hcDogSVRlbXBJZE1hcDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgLy8ga2V5IGlzIGRhdGFQcm9wZXJ0eS5uYW1lICsgfHwgKyBlbnRpdHlUeXBlLm5hbWUsIHZhbHVlIGlzIHByb3BFbnRyeVxyXG4gICAgLy8gcHJvcEVudHJ5ID0geyBlbnRpdHlUeXBlLCBwcm9wZXJ0eU5hbWUsIGtleU1hcCB9XHJcbiAgICAvLyBrZXlNYXAgaGFzIGtleSBvZiB0aGUgYWN0dWFsIHZhbHVlICggYXMgYSBzdHJpbmcpIGFuZCBhIHZhbHVlIG9mIG51bGwgb3IgdGhlIHJlYWwgaWQuXHJcbiAgICB0aGlzLl90ZW1wSWRNYXAgPSB7fTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gIFJldHVybnMgYSB1bmlxdWUgJ3RlbXBvcmFyeScgaWQgZm9yIHRoZSBzcGVjaWZpZWQgW1tFbnRpdHlUeXBlXV0uXHJcbiAgVW5pcXVlbmVzcyBpcyBkZWZpbmVkIGZvciB0aGlzIHB1cnBvc2UgYXMgYmVpbmcgdW5pcXVlIHdpdGhpbiBlYWNoIGluc3RhbmNlIG9mIGEgS2V5R2VuZXJhdG9yLiBUaGlzIGlzIHN1ZmZpY2llbnRcclxuICBiZWNhdXNlIGVhY2ggRW50aXR5TWFuYWdlciB3aWxsIGhhdmUgaXRzIG93biBpbnN0YW5jZSBvZiBhIEtleUdlbmVyYXRvciBhbmQgYW55IGVudGl0aWVzIGltcG9ydGVkIGludG9cclxuICB0aGUgRW50aXR5TWFuYWdlciB3aXRoIHRlbXBvcmFyeSBrZXlzIHdpbGwgaGF2ZSB0aGVtIHJlZ2VuZXJhdGVkIGFuZCByZW1hcHBlZCBvbiBpbXBvcnQuXHJcblxyXG4gIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QgbXVzdCBiZSBvZiB0aGUgY29ycmVjdCB0eXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGtleVByb3BlcnRpZXMgb2YgdGhlXHJcbiAgc3BlY2lmaWVkIEVudGl0eVR5cGVcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlclxyXG4gICAgICBsZXQgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIGxldCBjdXN0MSA9IGN1c3RUeXBlLmNyZWF0ZUVudGl0eSgpO1xyXG4gICAgICAvLyBuZXh0IGxpbmUgYm90aCBzZXRzIGN1c3QxJ3MgJ0N1c3RvbWVySWQnIHByb3BlcnR5IGJ1dCBhbHNvIHJldHVybnMgdGhlIHZhbHVlXHJcbiAgICAgIGxldCBjaWQxID0gZW0xLmdlbmVyYXRlVGVtcEtleVZhbHVlKGN1c3QxKTtcclxuICAgICAgZW0xLnNhdmVDaGFuZ2VzKCkudGhlbiggZnVuY3Rpb24oIGRhdGEpIHtcclxuICAgICAgICBsZXQgc2FtZUN1c3QxID0gZGF0YS5yZXN1bHRzWzBdO1xyXG4gICAgICAgIC8vIGN1c3QxID09PSBzYW1lQ3VzdDE7XHJcbiAgICAgICAgLy8gYnV0IGN1c3QxLmdldFByb3BlcnR5KFwiQ3VzdG9tZXJJZFwiKSAhPSBjaWQxXHJcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgc2VydmVyIHdpbGwgaGF2ZSBnZW5lcmF0ZWQgYSBuZXcgaWRcclxuICAgICAgICAvLyBhbmQgdGhlIGNsaWVudCB3aWxsIGhhdmUgYmVlbiB1cGRhdGVkIHdpdGggdGhpc1xyXG4gICAgICAgIC8vIG5ldyBpZC5cclxuICAgICAgfSk7XHJcbiAgQG1ldGhvZCBnZW5lcmF0ZVRlbXBLZXlWYWx1ZVxyXG4gIEBwYXJhbSBlbnRpdHlUeXBlIHtFbnRpdHlUeXBlfVxyXG4gICovXHJcbiAgZ2VuZXJhdGVUZW1wS2V5VmFsdWUoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdmFsdWVJZkF2YWlsPzogYm9vbGVhbikge1xyXG4gICAgbGV0IGtleVByb3BzID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gICAgaWYgKGtleVByb3BzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWRzIGNhbiBub3QgYmUgYXV0b2dlbmVyYXRlZCBmb3IgZW50aXRpZXMgd2l0aCBtdWx0aXBhcnQga2V5c1wiKTtcclxuICAgIH1cclxuICAgIGxldCBrZXlQcm9wID0ga2V5UHJvcHNbMF07XHJcbiAgICBsZXQgcHJvcEVudHJ5ID0gdGhpcy5fZ2V0UHJvcEVudHJ5KGtleVByb3AsIHRydWUpO1xyXG4gICAgbGV0IG5leHRJZDogYW55O1xyXG4gICAgaWYgKHZhbHVlSWZBdmFpbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICghcHJvcEVudHJ5LmtleU1hcFt2YWx1ZUlmQXZhaWwudG9TdHJpbmcoKV0pIHtcclxuICAgICAgICBuZXh0SWQgPSB2YWx1ZUlmQXZhaWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dElkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IGRhdGFUeXBlID0ga2V5UHJvcC5kYXRhVHlwZTtcclxuICAgICAgbGV0IGdldE5leHRGbiA9IChkYXRhVHlwZSBhcyBhbnkpLmdldE5leHQ7XHJcbiAgICAgIGlmIChnZXROZXh0Rm4pIHtcclxuICAgICAgICBuZXh0SWQgPSBnZXROZXh0Rm4odGhpcyk7XHJcbiAgICAgICAgLy8gbmVlZCB0byB3YXRjaCBvdXQgZm9yIGNvbGxpc2lvbiB3aXRoIHByZXZpb3VzbHkgaW1wb3J0ZWQgaWRzIHRoYXQgbWlnaHQgYWxzbyBnZXQgZ2VuZXJhdGVkLlxyXG4gICAgICAgIHdoaWxlIChwcm9wRW50cnkua2V5TWFwW25leHRJZC50b1N0cmluZygpXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBuZXh0SWQgPSBnZXROZXh0Rm4odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgYSBwcm9wZXJ0eSB3aXRoIGEgZGF0YVR5cGUgb2Y6IFwiICsgZGF0YVR5cGUudG9TdHJpbmcoKSArIFwiIGZvciBpZCBnZW5lcmF0aW9uXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvcEVudHJ5LmtleU1hcFtuZXh0SWQudG9TdHJpbmcoKV0gPSB0cnVlO1xyXG4gICAgcmV0dXJuIG5leHRJZDtcclxuICB9XHJcblxyXG4gIGdldFRlbXBLZXlzKCkge1xyXG4gICAgbGV0IHJlc3VsdHM6IEVudGl0eUtleVtdID0gW107XHJcbiAgICAvL25vaW5zcGVjdGlvbiBKU0hpbnRcclxuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLl90ZW1wSWRNYXApIHtcclxuICAgICAgbGV0IHByb3BFbnRyeSA9IHRoaXMuX3RlbXBJZE1hcFtrZXldO1xyXG4gICAgICBsZXQgZW50aXR5VHlwZSA9IHByb3BFbnRyeS5lbnRpdHlUeXBlO1xyXG4gICAgICAvLyBsZXQgcHJvcE5hbWUgPSBwcm9wRW50cnkucHJvcGVydHlOYW1lO1xyXG4gICAgICAvL25vaW5zcGVjdGlvbiBKU0hpbnRcclxuICAgICAgZm9yIChsZXQga2V5VmFsdWUgaW4gcHJvcEVudHJ5LmtleU1hcCkge1xyXG4gICAgICAgIHJlc3VsdHMucHVzaChuZXcgRW50aXR5S2V5KGVudGl0eVR5cGUsIFtrZXlWYWx1ZV0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcHJvdG8gbWV0aG9kcyBiZWxvdyBhcmUgbm90IHBhcnQgb2YgdGhlIEtleUdlbmVyYXRvciBpbnRlcmZhY2UuXHJcblxyXG4gIGlzVGVtcEtleShlbnRpdHlLZXk6IEVudGl0eUtleSkge1xyXG4gICAgbGV0IGtleVByb3BzID0gZW50aXR5S2V5LmVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICAgIGlmIChrZXlQcm9wcy5sZW5ndGggPiAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQga2V5UHJvcCA9IGtleVByb3BzWzBdO1xyXG4gICAgbGV0IHByb3BFbnRyeSA9IHRoaXMuX2dldFByb3BFbnRyeShrZXlQcm9wKTtcclxuICAgIGlmICghcHJvcEVudHJ5KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiAocHJvcEVudHJ5LmtleU1hcFtlbnRpdHlLZXkudmFsdWVzWzBdLnRvU3RyaW5nKCldICE9PSB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgcHJpdmF0ZSBfZ2V0UHJvcEVudHJ5KGtleVByb3A6IERhdGFQcm9wZXJ0eSwgY3JlYXRlSWZNaXNzaW5nID0gZmFsc2UpIHtcclxuICAgIGxldCBrZXkgPSBrZXlQcm9wLm5hbWUgKyBcIi4uXCIgKyBrZXlQcm9wLnBhcmVudFR5cGUubmFtZTtcclxuICAgIGxldCBwcm9wRW50cnkgPSB0aGlzLl90ZW1wSWRNYXBba2V5XTtcclxuICAgIGlmICghcHJvcEVudHJ5KSB7XHJcbiAgICAgIGlmIChjcmVhdGVJZk1pc3NpbmcpIHtcclxuICAgICAgICBwcm9wRW50cnkgPSB7IGVudGl0eVR5cGU6IGtleVByb3AucGFyZW50VHlwZSBhcyBFbnRpdHlUeXBlLCBwcm9wZXJ0eU5hbWU6IGtleVByb3AubmFtZSwga2V5TWFwOiB7fSB9O1xyXG4gICAgICAgIHRoaXMuX3RlbXBJZE1hcFtrZXldID0gcHJvcEVudHJ5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcEVudHJ5O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmNvbmZpZy5yZWdpc3RlclR5cGUoS2V5R2VuZXJhdG9yLCBcIktleUdlbmVyYXRvclwiKTtcclxuXHJcbiJdfQ==
@@ -45,7 +45,7 @@ export class MappingContext {
45
45
  let jra = this.jsonResultsAdapter;
46
46
  nodeContext = nodeContext || {};
47
47
  let that = this;
48
- return core.map(nodes, function (node) {
48
+ let result = core.map(nodes, function (node) {
49
49
  if (query == null && node.entityAspect) {
50
50
  // don't bother merging a result from a save that was not returned from the server.
51
51
  if (node.entityAspect.entityState.isDeleted()) {
@@ -63,6 +63,11 @@ export class MappingContext {
63
63
  }
64
64
  return processMeta(that, node, meta);
65
65
  }, this.mergeOptions.includeDeleted);
66
+ if (result.filter && !this.mergeOptions.includeDeleted) {
67
+ // result may have deleted entities because related nodes were processed
68
+ result = result.filter((x) => x && (!x.entityAspect || !x.entityAspect.entityState.isDeleted()));
69
+ }
70
+ return result;
66
71
  }
67
72
  processDeferred() {
68
73
  if (this.deferredFns.length > 0) {
@@ -242,10 +247,11 @@ function mergeEntity(mc, node, meta) {
242
247
  }
243
248
  }
244
249
  else {
250
+ // process targetEntity (even if deleted) to ensure related nodes are handled
251
+ updateEntityNoMerge(mc, targetEntity, node);
245
252
  if (targetEntityState === EntityState.Deleted && !mc.mergeOptions.includeDeleted) {
246
253
  return null;
247
254
  }
248
- updateEntityNoMerge(mc, targetEntity, node);
249
255
  }
250
256
  }
251
257
  }
@@ -402,4 +408,4 @@ function updateRelatedEntityInCollection(mc, relatedEntity, relatedEntities, tar
402
408
  relatedEntity.setProperty(inverseProperty.name, targetEntity);
403
409
  }
404
410
  }
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9tYXBwaW5nLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUcsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFpQixVQUFVLEVBQWtCLFlBQVksRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBc0I3Qzs7OztFQUlFO0FBQ0YsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQVksTUFBNEI7UUFieEMsZUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLHFDQUFxQztRQWVwRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYztTQUN4RCxDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFD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LElBQUksQ0FBQyxDQUFDO0lBRWpFLElBQUksVUFBVSxLQUFLLFlBQVksRUFBRTtRQUMvQix1QkFBdUI7UUFDdkIsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQyxhQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDL0Q7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNlcnZpY2VBZGFwdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSwgSnNvblJlc3VsdHNBZGFwdGVyLCBOb2RlQ29udGV4dCwgTm9kZU1ldGEgfSBmcm9tICcuL2RhdGEtc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlICB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTdG9yZSwgRW50aXR5VHlwZSwgU3RydWN0dXJhbFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1lcmdlU3RyYXRlZ3kgfSBmcm9tICcuL3F1ZXJ5LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuXHJcblxyXG4vKipcclxuRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gVGhlIGNsYXNzIGlzIGZvciB1c2UgaW4gYnVpbGRpbmcgYSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSBpbXBsZW1lbnRhdGlvbi4gXHJcbkBhZGFwdGVyIChzZWUgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0pICAgIFxyXG5AaGlkZGVuIFxyXG4qL1xyXG5leHBvcnQgaW50ZXJmYWNlIE1lcmdlT3B0aW9ucyB7XHJcbiAgbWVyZ2VTdHJhdGVneTogTWVyZ2VTdHJhdGVneTtcclxuICBpbmNsdWRlRGVsZXRlZD86IGJvb2xlYW47XHJcbiAgbm9UcmFja2luZz86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKiBAaGlkZGVuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWFwcGluZ0NvbnRleHRDb25maWcge1xyXG4gIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZTtcclxuICBxdWVyeT86IEVudGl0eVF1ZXJ5IHwgc3RyaW5nO1xyXG4gIGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXI7XHJcbiAgbWVyZ2VPcHRpb25zOiBNZXJnZU9wdGlvbnM7XHJcbn1cclxuXHJcbi8qKlxyXG5Gb3IgdXNlIGJ5IGJyZWV6ZSBwbHVnaW4gYXV0aG9ycyBvbmx5LiBUaGUgY2xhc3MgaXMgZm9yIHVzZSBpbiBidWlsZGluZyBhIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uLiBcclxuQGFkYXB0ZXIgKHNlZSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSkgICAgXHJcbkBoaWRkZW4gXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBNYXBwaW5nQ29udGV4dCB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBvbiBwcm90b3R5cGVcclxuXHJcbiAgcmF3VmFsdWVGbiA9IERhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXI7IC8vIHRoaW5rIGFib3V0IHBhc3NpbmcgdGhpcyBpbiBsYXRlci5cclxuXHJcbiAgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlO1xyXG4gIHF1ZXJ5OiBFbnRpdHlRdWVyeSB8IHN0cmluZztcclxuICBlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyO1xyXG4gIG1lcmdlT3B0aW9uczogTWVyZ2VPcHRpb25zO1xyXG4gIGFkYXB0ZXI6IERhdGFTZXJ2aWNlQWRhcHRlcjsgIC8vIGFzc2lnbmVkIGluIHRoZSBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlci5cclxuXHJcbiAgcmVmTWFwOiBPYmplY3Q7IC8vIFRPRE9cclxuICBkZWZlcnJlZEZuczogRnVuY3Rpb25bXTsgLy8gVE9ET1xyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyO1xyXG4gIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTWFwcGluZ0NvbnRleHRDb25maWcpIHtcclxuXHJcbiAgICBjb3JlLmV4dGVuZCh0aGlzLCBjb25maWcsIFtcclxuICAgICAgXCJxdWVyeVwiLCBcImVudGl0eU1hbmFnZXJcIiwgXCJkYXRhU2VydmljZVwiLCBcIm1lcmdlT3B0aW9uc1wiXHJcbiAgICBdKTtcclxuXHJcbiAgICAvLyBjYWxjJ2QgcHJvcHNcclxuICAgIHRoaXMucmVmTWFwID0ge307XHJcbiAgICB0aGlzLmRlZmVycmVkRm5zID0gW107XHJcbiAgICB0aGlzLmpzb25SZXN1bHRzQWRhcHRlciA9IHRoaXMuZGF0YVNlcnZpY2UuanNvblJlc3VsdHNBZGFwdGVyO1xyXG4gICAgdGhpcy5tZXRhZGF0YVN0b3JlID0gdGhpcy5lbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmU7XHJcbiAgICB0aGlzLnJhd1ZhbHVlRm4gPSBEYXRhUHJvcGVydHkuZ2V0UmF3VmFsdWVGcm9tU2VydmVyOyAvLyB0aGluayBhYm91dCBwYXNzaW5nIHRoaXMgaW4gbGF0ZXIuXHJcbiAgfVxyXG5cclxuICBnZXRVcmwoKSB7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBjYW5ub3QgYmUgZW1wdHlcIik7XHJcbiAgICB9XHJcbiAgICBsZXQgdXJpU3RyaW5nOiBzdHJpbmc7XHJcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnc3RyaW5nJykge1xyXG4gICAgICB1cmlTdHJpbmcgPSBxdWVyeTtcclxuICAgIH0gZWxzZSBpZiAocXVlcnkgaW5zdGFuY2VvZiBFbnRpdHlRdWVyeSkge1xyXG4gICAgICB1cmlTdHJpbmcgPSB0aGlzLmRhdGFTZXJ2aWNlLnVyaUJ1aWxkZXIhLmJ1aWxkVXJpKHF1ZXJ5LCB0aGlzLm1ldGFkYXRhU3RvcmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIHJlY29nbml6ZSBxdWVyeSBwYXJhbWV0ZXIgYXMgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIEVudGl0eVF1ZXJ5XCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UucXVhbGlmeVVybCh1cmlTdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgdmlzaXRBbmRNZXJnZShub2RlczogYW55W10sIG5vZGVDb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCBxdWVyeSA9IHRoaXMucXVlcnk7XHJcbiAgICBsZXQganJhID0gdGhpcy5qc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgICBub2RlQ29udGV4dCA9IG5vZGVDb250ZXh0IHx8IHt9O1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgcmV0dXJuIGNvcmUubWFwKG5vZGVzLCBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICBpZiAocXVlcnkgPT0gbnVsbCAmJiBub2RlLmVudGl0eUFzcGVjdCkge1xyXG4gICAgICAgIC8vIGRvbid0IGJvdGhlciBtZXJnaW5nIGEgcmVzdWx0IGZyb20gYSBzYXZlIHRoYXQgd2FzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgaWYgKG5vZGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgICAgICB0aGF0LmVudGl0eU1hbmFnZXIuZGV0YWNoRW50aXR5KG5vZGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBub2RlLmVudGl0eUFzcGVjdC5hY2NlcHRDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbWV0YSA9IGpyYS52aXNpdE5vZGUobm9kZSwgdGhhdCwgbm9kZUNvbnRleHQpIHx8IHt9O1xyXG4gICAgICBub2RlID0gbWV0YS5ub2RlIHx8IG5vZGU7XHJcbiAgICAgIGlmIChxdWVyeSAmJiBub2RlQ29udGV4dC5ub2RlVHlwZSA9PT0gXCJyb290XCIgJiYgIW1ldGEuZW50aXR5VHlwZSkge1xyXG4gICAgICAgIG1ldGEuZW50aXR5VHlwZSA9IHF1ZXJ5IGluc3RhbmNlb2YgRW50aXR5UXVlcnkgJiYgIHF1ZXJ5Ll9nZXRUb0VudGl0eVR5cGUgJiYgcXVlcnkuX2dldFRvRW50aXR5VHlwZSh0aGF0Lm1ldGFkYXRhU3RvcmUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwcm9jZXNzTWV0YSh0aGF0LCBub2RlLCBtZXRhKTtcclxuICAgIH0sIHRoaXMubWVyZ2VPcHRpb25zLmluY2x1ZGVEZWxldGVkKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NEZWZlcnJlZCgpIHtcclxuICAgIGlmICh0aGlzLmRlZmVycmVkRm5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5kZWZlcnJlZEZucy5mb3JFYWNoKChmbikgPT4ge1xyXG4gICAgICAgIGZuKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5NYXBwaW5nQ29udGV4dC5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiTWFwcGluZ0NvbnRleHRcIjtcclxuXHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzTWV0YShtYzogTWFwcGluZ0NvbnRleHQsIG5vZGU6IGFueSwgbWV0YTogTm9kZU1ldGEsIGFzc2lnbkZuPzogKHZhbDogYW55KSA9PiB2b2lkKSB7XHJcbiAgLy8gPT0gaXMgZGVsaWJlcmF0ZSBoZXJlIGluc3RlYWQgb2YgPT09XHJcbiAgaWYgKG1ldGEuaWdub3JlIHx8IG5vZGUgPT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfSBlbHNlIGlmIChtZXRhLm5vZGVSZWZJZCkge1xyXG4gICAgbGV0IHJlZlZhbHVlID0gcmVzb2x2ZUVudGl0eVJlZihtYywgbWV0YS5ub2RlUmVmSWQpO1xyXG4gICAgaWYgKHR5cGVvZiByZWZWYWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIGFzc2lnbkZuICE9IG51bGwpIHtcclxuICAgICAgbWMuZGVmZXJyZWRGbnMucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYXNzaWduRm4ocmVmVmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZGVmZXJyZWQgYW5kIHdpbGwgYmUgc2V0IGxhdGVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlZlZhbHVlO1xyXG4gIH0gZWxzZSBpZiAobWV0YS5lbnRpdHlUeXBlKSB7XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IG1ldGEuZW50aXR5VHlwZTtcclxuICAgIGlmIChtYy5tZXJnZU9wdGlvbnMubm9UcmFja2luZykge1xyXG4gICAgICBub2RlID0gcHJvY2Vzc05vTWVyZ2UobWMsIGVudGl0eVR5cGUsIG5vZGUpO1xyXG4gICAgICBpZiAoZW50aXR5VHlwZS5ub1RyYWNraW5nRm4pIHtcclxuICAgICAgICBub2RlID0gZW50aXR5VHlwZS5ub1RyYWNraW5nRm4obm9kZSwgZW50aXR5VHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1ldGEubm9kZUlkKSB7XHJcbiAgICAgICAgbWMucmVmTWFwW21ldGEubm9kZUlkXSA9IG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZW50aXR5VHlwZS5pc0NvbXBsZXhUeXBlKSB7XHJcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIGRvIHNlcnZlck5hbWUgdG8gY2xpZW50IG5hbWUgcHJvY2Vzc2luZ1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzTm9NZXJnZShtYywgZW50aXR5VHlwZSwgbm9kZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG1lcmdlRW50aXR5KG1jLCBub2RlLCBtZXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcblxyXG4gICAgaWYgKCghbWV0YS5wYXNzVGhydSkgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmICEgY29yZS5pc0RhdGUobm9kZSkpIHtcclxuICAgICAgbm9kZSA9IHByb2Nlc3NBbm9uVHlwZShtYywgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRpbmcgdGhlIHJlZk1hcCBmb3IgZW50aXRpZXMgaXMgaGFuZGxlZCBieSB1cGRhdGVFbnRpdHlSZWYgZm9yIGVudGl0aWVzLlxyXG4gICAgaWYgKG1ldGEubm9kZUlkKSB7XHJcbiAgICAgIG1jLnJlZk1hcFttZXRhLm5vZGVJZF0gPSBub2RlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzTm9NZXJnZShtYzogTWFwcGluZ0NvbnRleHQsIHN0eXBlOiBTdHJ1Y3R1cmFsVHlwZSwgbm9kZTogYW55KSB7XHJcbiAgbGV0IHJlc3VsdCA9IHt9O1xyXG5cclxuICBzdHlwZS5kYXRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChkcCkge1xyXG4gICAgaWYgKGRwLmlzQ29tcGxleFByb3BlcnR5KSB7XHJcbiAgICAgIHJlc3VsdFtkcC5uYW1lXSA9IGNvcmUubWFwKG5vZGVbZHAubmFtZU9uU2VydmVyXSwgKHY6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzTm9NZXJnZShtYywgZHAuZGF0YVR5cGUgYXMgYW55LCB2KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXN1bHRbZHAubmFtZV0gPSBEYXRhVHlwZS5wYXJzZVJhd1ZhbHVlKG5vZGVbZHAubmFtZU9uU2VydmVyXSwgZHAuZGF0YVR5cGUgYXMgRGF0YVR5cGUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAoc3R5cGUgaW5zdGFuY2VvZiBFbnRpdHlUeXBlKSAmJiBzdHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKCAobnApID0+IHtcclxuICAgIGxldCBub2RlQ29udGV4dCA9IHsgbm9kZVR5cGU6IFwibmF2UHJvcFwiLCBuYXZpZ2F0aW9uUHJvcGVydHk6IG5wIH07XHJcbiAgICB2aXNpdE5vZGUobm9kZVtucC5uYW1lT25TZXJ2ZXJdLCBtYywgbm9kZUNvbnRleHQsIHJlc3VsdCwgbnAubmFtZSk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NBbm9uVHlwZShtYzogTWFwcGluZ0NvbnRleHQsIG5vZGU6IGFueSkge1xyXG4gIC8vIG5vZGUgaXMgZ3VhcmFudGVlZCB0byBiZSBhbiBvYmplY3QgYnkgdGhpcyBwb2ludCwgaS5lLiBub3QgYSBzY2FsYXJcclxuICBsZXQga2V5Rm4gPSBtYy5tZXRhZGF0YVN0b3JlLm5hbWluZ0NvbnZlbnRpb24uc2VydmVyUHJvcGVydHlOYW1lVG9DbGllbnQ7XHJcbiAgbGV0IHJlc3VsdCA9IHt9O1xyXG5cclxuICBjb3JlLm9iamVjdEZvckVhY2gobm9kZSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgIGxldCBuZXdLZXkgPSBrZXlGbihrZXkpO1xyXG4gICAgbGV0IG5vZGVDb250ZXh0ID0geyBub2RlVHlwZTogXCJhbm9uUHJvcFwiLCBwcm9wZXJ0eU5hbWU6IG5ld0tleSB9O1xyXG4gICAgdmlzaXROb2RlKHZhbHVlLCBtYywgbm9kZUNvbnRleHQsIHJlc3VsdCwgbmV3S2V5KTtcclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiB2aXNpdE5vZGUobm9kZTogYW55LCBtYzogTWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0OiBOb2RlQ29udGV4dCwgcmVzdWx0OiBPYmplY3QsIGtleTogc3RyaW5nKSB7XHJcbiAgbGV0IGpyYSA9IG1jLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICBsZXQgbWV0YSA9IGpyYS52aXNpdE5vZGUobm9kZSwgbWMsIG5vZGVDb250ZXh0KSB8fCB7fTtcclxuICAvLyBhbGxvd3MgdmlzaXROb2RlIHRvIGNoYW5nZSB0aGUgdmFsdWU7XHJcbiAgbm9kZSA9IG1ldGEubm9kZSB8fCBub2RlO1xyXG5cclxuICBpZiAobWV0YS5pZ25vcmUpIHJldHVybjtcclxuICBpZiAobWV0YS5wYXNzVGhydSkgcmV0dXJuIG5vZGU7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcclxuICAgIG5vZGVDb250ZXh0Lm5vZGVUeXBlID0gbm9kZUNvbnRleHQubm9kZVR5cGUgKyBcIkl0ZW1cIjtcclxuICAgIHJlc3VsdFtrZXldID0gbm9kZS5tYXAoZnVuY3Rpb24gKHYsIGl4KSB7XHJcbiAgICAgIG1ldGEgPSBqcmEudmlzaXROb2RlKHYsIG1jLCBub2RlQ29udGV4dCkgfHwge307XHJcbiAgICAgIHYgPSBtZXRhLm5vZGUgfHwgdjtcclxuICAgICAgcmV0dXJuIHByb2Nlc3NNZXRhKG1jLCB2LCBtZXRhLCBmdW5jdGlvbiAocmVmVmFsdWUpIHtcclxuICAgICAgICByZXN1bHRba2V5XVtpeF0gPSByZWZWYWx1ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXN1bHRba2V5XSA9IHByb2Nlc3NNZXRhKG1jLCBub2RlLCBtZXRhLCBmdW5jdGlvbiAocmVmVmFsdWUpIHtcclxuICAgICAgcmVzdWx0W2tleV0gPSByZWZWYWx1ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlRW50aXR5UmVmKG1jOiBNYXBwaW5nQ29udGV4dCwgbm9kZVJlZklkOiBzdHJpbmcpIHtcclxuICBsZXQgZW50aXR5ID0gbWMucmVmTWFwW25vZGVSZWZJZF07XHJcbiAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWMucmVmTWFwW25vZGVSZWZJZF07XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZW50aXR5O1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRW50aXR5UmVmKG1jOiBNYXBwaW5nQ29udGV4dCwgdGFyZ2V0RW50aXR5OiBhbnksIG5vZGU6IGFueSkge1xyXG4gIGxldCBub2RlSWQgPSBub2RlLl8kbWV0YS5ub2RlSWQ7XHJcbiAgaWYgKCFub2RlSWQgJiYgbm9kZS5fJG1ldGEuZXh0cmFNZXRhZGF0YSkge1xyXG4gICAgLy8gb2RhdGEgY2FzZS4gIHJlZk1hcCBpc24ndCByZWFsbHkgdXNlZCwgYnV0IGlzIHJldHVybmVkIGFzIGRhdGEucmV0cmlldmVkRW50aXRpZXMsIHNvIHdlIHBvcHVsYXRlZCBpdCBhbnl3YXkuXHJcbiAgICBub2RlSWQgPSBub2RlLl8kbWV0YS5leHRyYU1ldGFkYXRhLnVyaUtleTtcclxuICB9XHJcbiAgaWYgKG5vZGVJZCAhPSBudWxsKSB7XHJcbiAgICBtYy5yZWZNYXBbbm9kZUlkXSA9IHRhcmdldEVudGl0eTtcclxuICB9XHJcbn1cclxuXHJcbi8vIGNhbiByZXR1cm4gbnVsbCBmb3IgYSBkZWxldGVkIGVudGl0eSBpZiBpbmNsdWRlRGVsZXRlZCA9PSBmYWxzZVxyXG5mdW5jdGlvbiBtZXJnZUVudGl0eShtYzogTWFwcGluZ0NvbnRleHQsIG5vZGU6IGFueSwgbWV0YTogTm9kZU1ldGEpIHtcclxuICBub2RlLl8kbWV0YSA9IG1ldGE7XHJcbiAgbGV0IGVtID0gbWMuZW50aXR5TWFuYWdlcjtcclxuXHJcbiAgbGV0IGVudGl0eVR5cGUgPSBtZXRhLmVudGl0eVR5cGUgYXMgRW50aXR5VHlwZTtcclxuICBpZiAodHlwZW9mIChlbnRpdHlUeXBlKSA9PT0gJ3N0cmluZycpIHtcclxuICAgIGVudGl0eVR5cGUgPSBtYy5tZXRhZGF0YVN0b3JlLl9nZXRTdHJ1Y3R1cmFsVHlwZShlbnRpdHlUeXBlLCBmYWxzZSkgYXMgRW50aXR5VHlwZTtcclxuICB9XHJcbiAgbm9kZS5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcclxuXHJcbiAgbGV0IG1lcmdlU3RyYXRlZ3kgPSBtYy5tZXJnZU9wdGlvbnMubWVyZ2VTdHJhdGVneTtcclxuICBsZXQgaXNTYXZpbmcgPSBtYy5xdWVyeSA9PSBudWxsO1xyXG5cclxuICBsZXQgZW50aXR5S2V5ID0gZW50aXR5VHlwZS5nZXRFbnRpdHlLZXlGcm9tUmF3RW50aXR5KG5vZGUsIG1jLnJhd1ZhbHVlRm4pO1xyXG4gIGxldCB0YXJnZXRFbnRpdHkgPSBlbS5nZXRFbnRpdHlCeUtleShlbnRpdHlLZXkpO1xyXG4gIGlmICh0YXJnZXRFbnRpdHkpIHtcclxuICAgIGlmIChpc1NhdmluZyAmJiB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgIGVtLmRldGFjaEVudGl0eSh0YXJnZXRFbnRpdHkpO1xyXG4gICAgICByZXR1cm4gdGFyZ2V0RW50aXR5O1xyXG4gICAgfVxyXG4gICAgbGV0IHRhcmdldEVudGl0eVN0YXRlID0gdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICAgIGlmIChtZXJnZVN0cmF0ZWd5ID09PSBNZXJnZVN0cmF0ZWd5LkRpc2FsbG93ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBNZXJnZVN0cmF0ZWd5IG9mICdEaXNhbGxvd2VkJyBwcmV2ZW50cyBcIiArIGVudGl0eUtleS50b1N0cmluZygpICsgXCIgZnJvbSBiZWluZyBtZXJnZWRcIik7XHJcbiAgICB9IGVsc2UgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IE1lcmdlU3RyYXRlZ3kuU2tpcE1lcmdlKSB7XHJcbiAgICAgIHVwZGF0ZUVudGl0eU5vTWVyZ2UobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5PdmVyd3JpdGVDaGFuZ2VzXHJcbiAgICAgICAgfHwgdGFyZ2V0RW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKSkge1xyXG4gICAgICAgIHVwZGF0ZUVudGl0eShtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0Lndhc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKG1ldGEuZXh0cmFNZXRhZGF0YSkge1xyXG4gICAgICAgICAgdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5leHRyYU1ldGFkYXRhID0gbWV0YS5leHRyYU1ldGFkYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlID0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkO1xyXG4gICAgICAgIGNsZWFyT3JpZ2luYWxWYWx1ZXModGFyZ2V0RW50aXR5KTtcclxuICAgICAgICAvLyBwcm9wZXJ0eU5hbWUgbm90IHNwZWNpZmllZCBiZWNhdXNlIG11bHRpcGxlIHByb3BzIEVudGl0eUNoYW5nZWRFdmVudEFyZ3NcclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5OiB0YXJnZXRFbnRpdHksIHByb3BlcnR5TmFtZTogbnVsbCB9KTtcclxuICAgICAgICBsZXQgYWN0aW9uID0gaXNTYXZpbmcgPyBFbnRpdHlBY3Rpb24uTWVyZ2VPblNhdmUgOiBFbnRpdHlBY3Rpb24uTWVyZ2VPblF1ZXJ5O1xyXG4gICAgICAgIGVtLmVudGl0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eUFjdGlvbjogYWN0aW9uLCBlbnRpdHk6IHRhcmdldEVudGl0eSB9KTtcclxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byBoYW5kbGUgYW4gb3ZlcndyaXRlIG9mIGEgbW9kaWZpZWQgZW50aXR5IHdpdGggYW4gdW5jaGFuZ2VkIGVudGl0eVxyXG4gICAgICAgIC8vIHdoaWNoIG1pZ2h0IGluIHR1cm4gY2F1c2UgX2hhc0NoYW5nZXMgdG8gY2hhbmdlLlxyXG4gICAgICAgIGlmICghdGFyZ2V0RW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKSkge1xyXG4gICAgICAgICAgZW0uX25vdGlmeVN0YXRlQ2hhbmdlKHRhcmdldEVudGl0eSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGFyZ2V0RW50aXR5U3RhdGUgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWQgJiYgIW1jLm1lcmdlT3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVwZGF0ZUVudGl0eU5vTWVyZ2UobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGFyZ2V0RW50aXR5ID0gZW50aXR5VHlwZS5fY3JlYXRlSW5zdGFuY2VDb3JlKCkgYXMgRW50aXR5O1xyXG5cclxuICAgIHVwZGF0ZUVudGl0eShtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuXHJcbiAgICBpZiAobWV0YS5leHRyYU1ldGFkYXRhKSB7XHJcbiAgICAgIHRhcmdldEVudGl0eS5lbnRpdHlBc3BlY3QuZXh0cmFNZXRhZGF0YSA9IG1ldGEuZXh0cmFNZXRhZGF0YTtcclxuICAgIH1cclxuICAgIC8vIGVtLl9hdHRhY2hFbnRpdHlDb3JlKHRhcmdldEVudGl0eSwgRW50aXR5U3RhdGUuVW5jaGFuZ2VkLCBNZXJnZVN0cmF0ZWd5LkRpc2FsbG93ZWQpO1xyXG4gICAgZW0uX2F0dGFjaEVudGl0eUNvcmUodGFyZ2V0RW50aXR5LCBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQsIG1lcmdlU3RyYXRlZ3kpO1xyXG4gICAgdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC53YXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgZW0uZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uQXR0YWNoT25RdWVyeSwgZW50aXR5OiB0YXJnZXRFbnRpdHkgfSk7XHJcbiAgfVxyXG4gIHJldHVybiB0YXJnZXRFbnRpdHk7XHJcbn1cclxuXHJcbi8vIGNvcGllZCBmcm9tIGVudGl0eUFzcGVjdFxyXG5mdW5jdGlvbiBjbGVhck9yaWdpbmFsVmFsdWVzKHRhcmdldDogYW55KSB7XHJcbiAgbGV0IGFzcGVjdCA9IHRhcmdldC5lbnRpdHlBc3BlY3QgfHwgdGFyZ2V0LmNvbXBsZXhBc3BlY3Q7XHJcbiAgYXNwZWN0Lm9yaWdpbmFsVmFsdWVzID0ge307XHJcbiAgbGV0IHN0eXBlID0gdGFyZ2V0LmVudGl0eVR5cGUgfHwgdGFyZ2V0LmNvbXBsZXhUeXBlO1xyXG4gIHN0eXBlLmNvbXBsZXhQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGNwOiBhbnkpIHtcclxuICAgIGxldCBjb3MgPSB0YXJnZXQuZ2V0UHJvcGVydHkoY3AubmFtZSk7XHJcbiAgICBpZiAoY3AuaXNTY2FsYXIpIHtcclxuICAgICAgY2xlYXJPcmlnaW5hbFZhbHVlcyhjb3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29zLl9hY2NlcHRDaGFuZ2VzKCk7XHJcbiAgICAgIGNvcy5mb3JFYWNoKGNsZWFyT3JpZ2luYWxWYWx1ZXMpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRW50aXR5Tm9NZXJnZShtYzogTWFwcGluZ0NvbnRleHQsIHRhcmdldEVudGl0eTogRW50aXR5LCBub2RlOiBhbnkpIHtcclxuICB1cGRhdGVFbnRpdHlSZWYobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgLy8gd2Ugc3RpbGwgbmVlZCB0byBtZXJnZSByZWxhdGVkIGVudGl0aWVzIGV2ZW4gaWYgdG9wIGxldmVsIGVudGl0eSB3YXNuJ3QgbW9kaWZpZWQuXHJcbiAgbm9kZS5lbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5wOiBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICAgIGlmIChucC5pc1NjYWxhcikge1xyXG4gICAgICBtZXJnZVJlbGF0ZWRFbnRpdHlDb3JlKG1jLCBub2RlLCBucCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXJnZVJlbGF0ZWRFbnRpdGllc0NvcmUobWMsIG5vZGUsIG5wKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRW50aXR5KG1jOiBNYXBwaW5nQ29udGV4dCwgdGFyZ2V0RW50aXR5OiBFbnRpdHksIG5vZGU6IGFueSkge1xyXG4gIHVwZGF0ZUVudGl0eVJlZihtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICBsZXQgZW50aXR5VHlwZSA9IHRhcmdldEVudGl0eS5lbnRpdHlUeXBlO1xyXG4gIGVudGl0eVR5cGUuX3VwZGF0ZVRhcmdldEZyb21SYXcodGFyZ2V0RW50aXR5LCBub2RlLCBtYy5yYXdWYWx1ZUZuKTtcclxuXHJcbiAgZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChucCkge1xyXG4gICAgaWYgKG5wLmlzU2NhbGFyKSB7XHJcbiAgICAgIG1lcmdlUmVsYXRlZEVudGl0eShtYywgbnAsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXJnZVJlbGF0ZWRFbnRpdGllcyhtYywgbnAsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1lcmdlUmVsYXRlZEVudGl0eShtYzogTWFwcGluZ0NvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LCB0YXJnZXRFbnRpdHk6IEVudGl0eSwgcmF3RW50aXR5OiBhbnkpIHtcclxuXHJcbiAgbGV0IHJlbGF0ZWRFbnRpdHkgPSBtZXJnZVJlbGF0ZWRFbnRpdHlDb3JlKG1jLCByYXdFbnRpdHksIG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgaWYgKHJlbGF0ZWRFbnRpdHkgPT0gbnVsbCkgcmV0dXJuO1xyXG4gIGlmICh0eXBlb2YgcmVsYXRlZEVudGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgbWMuZGVmZXJyZWRGbnMucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJlbGF0ZWRFbnRpdHkgPSByZWxhdGVkRW50aXR5KCk7XHJcbiAgICAgIHVwZGF0ZVJlbGF0ZWRFbnRpdHkocmVsYXRlZEVudGl0eSwgdGFyZ2V0RW50aXR5LCBuYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHVwZGF0ZVJlbGF0ZWRFbnRpdHkocmVsYXRlZEVudGl0eSwgdGFyZ2V0RW50aXR5LCBuYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbWVyZ2VSZWxhdGVkRW50aXRpZXMobWM6IE1hcHBpbmdDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSwgdGFyZ2V0RW50aXR5OiBFbnRpdHksIHJhd0VudGl0eTogYW55KSB7XHJcbiAgbGV0IHJlbGF0ZWRFbnRpdGllcyA9IG1lcmdlUmVsYXRlZEVudGl0aWVzQ29yZShtYywgcmF3RW50aXR5LCBuYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gIGlmIChyZWxhdGVkRW50aXRpZXMgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICBsZXQgaW52ZXJzZVByb3BlcnR5ID0gbmF2aWdhdGlvblByb3BlcnR5LmludmVyc2U7XHJcbiAgaWYgKCFpbnZlcnNlUHJvcGVydHkpIHJldHVybjtcclxuXHJcbiAgbGV0IG9yaWdpbmFsUmVsYXRlZEVudGl0aWVzID0gdGFyZ2V0RW50aXR5LmdldFByb3BlcnR5KG5hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lKTtcclxuICBvcmlnaW5hbFJlbGF0ZWRFbnRpdGllcy53YXNMb2FkZWQgPSB0cnVlO1xyXG5cclxuICByZWxhdGVkRW50aXRpZXMuZm9yRWFjaChmdW5jdGlvbiAocmVsYXRlZEVudGl0eTogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIHJlbGF0ZWRFbnRpdHkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbWMuZGVmZXJyZWRGbnMucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmVsYXRlZEVudGl0eSA9IHJlbGF0ZWRFbnRpdHkoKTtcclxuICAgICAgICB1cGRhdGVSZWxhdGVkRW50aXR5SW5Db2xsZWN0aW9uKG1jLCByZWxhdGVkRW50aXR5LCBvcmlnaW5hbFJlbGF0ZWRFbnRpdGllcywgdGFyZ2V0RW50aXR5LCBpbnZlcnNlUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cGRhdGVSZWxhdGVkRW50aXR5SW5Db2xsZWN0aW9uKG1jLCByZWxhdGVkRW50aXR5LCBvcmlnaW5hbFJlbGF0ZWRFbnRpdGllcywgdGFyZ2V0RW50aXR5LCBpbnZlcnNlUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5KTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWVyZ2VSZWxhdGVkRW50aXR5Q29yZShtYzogTWFwcGluZ0NvbnRleHQsIHJhd0VudGl0eTogYW55LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gIGxldCByZWxhdGVkUmF3RW50aXR5ID0gcmF3RW50aXR5W25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lT25TZXJ2ZXJdO1xyXG4gIGlmICghcmVsYXRlZFJhd0VudGl0eSkgcmV0dXJuIG51bGw7XHJcblxyXG4gIGxldCByZWxhdGVkRW50aXR5ID0gbWMudmlzaXRBbmRNZXJnZShyZWxhdGVkUmF3RW50aXR5LCB7IG5vZGVUeXBlOiBcIm5hdlByb3BcIiwgbmF2aWdhdGlvblByb3BlcnR5OiBuYXZpZ2F0aW9uUHJvcGVydHkgfSk7XHJcbiAgcmV0dXJuIHJlbGF0ZWRFbnRpdHk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1lcmdlUmVsYXRlZEVudGl0aWVzQ29yZShtYzogTWFwcGluZ0NvbnRleHQsIHJhd0VudGl0eTogYW55LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gIGxldCByZWxhdGVkUmF3RW50aXRpZXMgPSByYXdFbnRpdHlbbmF2aWdhdGlvblByb3BlcnR5Lm5hbWVPblNlcnZlcl07XHJcbiAgaWYgKCFyZWxhdGVkUmF3RW50aXRpZXMpIHJldHVybiBudWxsO1xyXG5cclxuICAvLyBuZWVkZWQgaWYgd2hhdCBpcyByZXR1cm5lZCBpcyBub3QgYW4gYXJyYXkgYW5kIHdlIGV4cGVjdCBvbmUgLSB0aGlzIGhhcHBlbnMgd2l0aCBfX2RlZmVycmVkIGluIE9EYXRhLlxyXG4gIGlmICghQXJyYXkuaXNBcnJheShyZWxhdGVkUmF3RW50aXRpZXMpKSB7XHJcbiAgICAvLyByZXR1cm4gbnVsbDtcclxuICAgIHJlbGF0ZWRSYXdFbnRpdGllcyA9IHJlbGF0ZWRSYXdFbnRpdGllcy5yZXN1bHRzOyAvLyBPRGF0YSB2MyB3aWxsIGxvb2sgbGlrZSB0aGlzIHdpdGggYW4gZXhwYW5kXHJcbiAgICBpZiAoIXJlbGF0ZWRSYXdFbnRpdGllcykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldCByZWxhdGVkRW50aXRpZXMgPSBtYy52aXNpdEFuZE1lcmdlKHJlbGF0ZWRSYXdFbnRpdGllcywgeyBub2RlVHlwZTogXCJuYXZQcm9wSXRlbVwiLCBuYXZpZ2F0aW9uUHJvcGVydHk6IG5hdmlnYXRpb25Qcm9wZXJ0eSB9KTtcclxuICByZXR1cm4gcmVsYXRlZEVudGl0aWVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVSZWxhdGVkRW50aXR5KHJlbGF0ZWRFbnRpdHk6IEVudGl0eSwgdGFyZ2V0RW50aXR5OiBFbnRpdHksIG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgaWYgKCFyZWxhdGVkRW50aXR5KSByZXR1cm47XHJcbiAgbGV0IHByb3BOYW1lID0gbmF2aWdhdGlvblByb3BlcnR5Lm5hbWU7XHJcbiAgbGV0IGN1cnJlbnRSZWxhdGVkRW50aXR5ID0gdGFyZ2V0RW50aXR5LmdldFByb3BlcnR5KHByb3BOYW1lKTtcclxuXHJcbiAgLy8gY2hlY2sgaWYgdGhlIHJlbGF0ZWQgZW50aXR5IGlzIGFscmVhZHkgaG9va2VkIHVwXHJcbiAgaWYgKGN1cnJlbnRSZWxhdGVkRW50aXR5ICE9PSByZWxhdGVkRW50aXR5KSB7XHJcbiAgICAvLyBpZiBub3QgaG9vayB1cCBib3RoIGRpcmVjdGlvbnMuXHJcbiAgICB0YXJnZXRFbnRpdHkuc2V0UHJvcGVydHkocHJvcE5hbWUsIHJlbGF0ZWRFbnRpdHkpO1xyXG4gICAgbGV0IGludmVyc2VQcm9wZXJ0eSA9IG5hdmlnYXRpb25Qcm9wZXJ0eS5pbnZlcnNlO1xyXG4gICAgaWYgKCFpbnZlcnNlUHJvcGVydHkpIHJldHVybjtcclxuICAgIGlmIChpbnZlcnNlUHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgICAgcmVsYXRlZEVudGl0eS5zZXRQcm9wZXJ0eShpbnZlcnNlUHJvcGVydHkubmFtZSwgdGFyZ2V0RW50aXR5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBjb2xsZWN0aW9uID0gcmVsYXRlZEVudGl0eS5nZXRQcm9wZXJ0eShpbnZlcnNlUHJvcGVydHkubmFtZSk7XHJcbiAgICAgIGNvbGxlY3Rpb24ucHVzaCh0YXJnZXRFbnRpdHkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZWRFbnRpdHlJbkNvbGxlY3Rpb24obWM6IE1hcHBpbmdDb250ZXh0LCByZWxhdGVkRW50aXR5OiBFbnRpdHkgfCB1bmRlZmluZWQsXHJcbiAgICByZWxhdGVkRW50aXRpZXM6IEVudGl0eVtdLCB0YXJnZXRFbnRpdHk6IEVudGl0eSwgaW52ZXJzZVByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICBpZiAoIXJlbGF0ZWRFbnRpdHkpIHJldHVybjtcclxuXHJcbiAgLy8gZG9uJ3QgdXBkYXRlIHJlbGF0ZWRDb2xsZWN0aW9uIGlmIHByZXNlcnZlQ2hhbmdlcyAmIHJlbGF0ZWRFbnRpdHkgaGFzIGFuIGZrQ2hhbmdlLlxyXG4gIGlmIChyZWxhdGVkRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZSA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWRcclxuICAgICYmIG1jLm1lcmdlT3B0aW9ucy5tZXJnZVN0cmF0ZWd5ID09PSBNZXJnZVN0cmF0ZWd5LlByZXNlcnZlQ2hhbmdlcykge1xyXG4gICAgbGV0IG9yaWdWYWx1ZXMgPSByZWxhdGVkRW50aXR5LmVudGl0eUFzcGVjdC5vcmlnaW5hbFZhbHVlcztcclxuICAgIGxldCBma1dhc01vZGlmaWVkID0gaW52ZXJzZVByb3BlcnR5LnJlbGF0ZWREYXRhUHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICByZXR1cm4gb3JpZ1ZhbHVlc1tkcC5uYW1lXSAhPSB1bmRlZmluZWQ7XHJcbiAgICB9KTtcclxuICAgIGlmIChma1dhc01vZGlmaWVkKSByZXR1cm47XHJcbiAgfVxyXG4gIC8vIGNoZWNrIGlmIHRoZSByZWxhdGVkIGVudGl0eSBpcyBhbHJlYWR5IGhvb2tlZCB1cFxyXG4gIGxldCB0aGlzRW50aXR5ID0gcmVsYXRlZEVudGl0eS5nZXRQcm9wZXJ0eShpbnZlcnNlUHJvcGVydHkubmFtZSk7XHJcblxyXG4gIGlmICh0aGlzRW50aXR5ICE9PSB0YXJnZXRFbnRpdHkpIHtcclxuICAgIC8vIGlmIG5vdCAtIGhvb2sgaXQgdXAuXHJcbiAgICByZWxhdGVkRW50aXRpZXMucHVzaChyZWxhdGVkRW50aXR5KTtcclxuICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52ZXJzZVByb3BlcnR5Lm5hbWUsIHRhcmdldEVudGl0eSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9tYXBwaW5nLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUcsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFpQixVQUFVLEVBQWtCLFlBQVksRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBc0I3Qzs7OztFQUlFO0FBQ0YsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQVksTUFBNEI7UUFieEMsZUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLHFDQUFxQztRQWVwRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYztTQUN4RCxDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFD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QWUsRUFBRTtRQUNwRSxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUMzRCxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6RSxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxhQUFhO1lBQUUsT0FBTztLQUMzQjtJQUNELG1EQUFtRDtJQUNuRCxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRSxJQUFJLFVBQVUsS0FBSyxZQUFZLEVBQUU7UUFDL0IsdUJBQXVCO1FBQ3ZCLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQy9EO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTZXJ2aWNlQWRhcHRlciB9IGZyb20gJy4vaW50ZXJmYWNlLXJlZ2lzdHJ5JztcclxuaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIEpzb25SZXN1bHRzQWRhcHRlciwgTm9kZUNvbnRleHQsIE5vZGVNZXRhIH0gZnJvbSAnLi9kYXRhLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSAgfSBmcm9tICcuL2VudGl0eS1zdGF0ZSc7XHJcbmltcG9ydCB7IEVudGl0eUFjdGlvbiB9IGZyb20gJy4vZW50aXR5LWFjdGlvbic7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIFN0cnVjdHVyYWxUeXBlLCBEYXRhUHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBNZXJnZVN0cmF0ZWd5IH0gZnJvbSAnLi9xdWVyeS1vcHRpb25zJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcblxyXG5cclxuLyoqXHJcbkZvciB1c2UgYnkgYnJlZXplIHBsdWdpbiBhdXRob3JzIG9ubHkuIFRoZSBjbGFzcyBpcyBmb3IgdXNlIGluIGJ1aWxkaW5nIGEgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24uIFxyXG5AYWRhcHRlciAoc2VlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dKSAgICBcclxuQGhpZGRlbiBcclxuKi9cclxuZXhwb3J0IGludGVyZmFjZSBNZXJnZU9wdGlvbnMge1xyXG4gIG1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3k7XHJcbiAgaW5jbHVkZURlbGV0ZWQ/OiBib29sZWFuO1xyXG4gIG5vVHJhY2tpbmc/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE1hcHBpbmdDb250ZXh0Q29uZmlnIHtcclxuICBkYXRhU2VydmljZTogRGF0YVNlcnZpY2U7XHJcbiAgcXVlcnk/OiBFbnRpdHlRdWVyeSB8IHN0cmluZztcclxuICBlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyO1xyXG4gIG1lcmdlT3B0aW9uczogTWVyZ2VPcHRpb25zO1xyXG59XHJcblxyXG4vKipcclxuRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gVGhlIGNsYXNzIGlzIGZvciB1c2UgaW4gYnVpbGRpbmcgYSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSBpbXBsZW1lbnRhdGlvbi4gXHJcbkBhZGFwdGVyIChzZWUgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0pICAgIFxyXG5AaGlkZGVuIFxyXG4qL1xyXG5leHBvcnQgY2xhc3MgTWFwcGluZ0NvbnRleHQge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gb24gcHJvdG90eXBlXHJcblxyXG4gIHJhd1ZhbHVlRm4gPSBEYXRhUHJvcGVydHkuZ2V0UmF3VmFsdWVGcm9tU2VydmVyOyAvLyB0aGluayBhYm91dCBwYXNzaW5nIHRoaXMgaW4gbGF0ZXIuXHJcblxyXG4gIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZTtcclxuICBxdWVyeTogRW50aXR5UXVlcnkgfCBzdHJpbmc7XHJcbiAgZW50aXR5TWFuYWdlcjogRW50aXR5TWFuYWdlcjtcclxuICBtZXJnZU9wdGlvbnM6IE1lcmdlT3B0aW9ucztcclxuICBhZGFwdGVyOiBEYXRhU2VydmljZUFkYXB0ZXI7ICAvLyBhc3NpZ25lZCBpbiB0aGUgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuXHJcblxyXG4gIHJlZk1hcDogUmVjb3JkPHN0cmluZywgYW55PjsgLy8gVE9ET1xyXG4gIGRlZmVycmVkRm5zOiBGdW5jdGlvbltdOyAvLyBUT0RPXHJcbiAganNvblJlc3VsdHNBZGFwdGVyOiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZTtcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBNYXBwaW5nQ29udGV4dENvbmZpZykge1xyXG5cclxuICAgIGNvcmUuZXh0ZW5kKHRoaXMsIGNvbmZpZywgW1xyXG4gICAgICBcInF1ZXJ5XCIsIFwiZW50aXR5TWFuYWdlclwiLCBcImRhdGFTZXJ2aWNlXCIsIFwibWVyZ2VPcHRpb25zXCJcclxuICAgIF0pO1xyXG5cclxuICAgIC8vIGNhbGMnZCBwcm9wc1xyXG4gICAgdGhpcy5yZWZNYXAgPSB7fTtcclxuICAgIHRoaXMuZGVmZXJyZWRGbnMgPSBbXTtcclxuICAgIHRoaXMuanNvblJlc3VsdHNBZGFwdGVyID0gdGhpcy5kYXRhU2VydmljZS5qc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgICB0aGlzLm1ldGFkYXRhU3RvcmUgPSB0aGlzLmVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZTtcclxuICAgIHRoaXMucmF3VmFsdWVGbiA9IERhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXI7IC8vIHRoaW5rIGFib3V0IHBhc3NpbmcgdGhpcyBpbiBsYXRlci5cclxuICB9XHJcblxyXG4gIGdldFVybCgpIHtcclxuICAgIGxldCBxdWVyeSA9IHRoaXMucXVlcnk7XHJcbiAgICBpZiAoIXF1ZXJ5KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInF1ZXJ5IGNhbm5vdCBiZSBlbXB0eVwiKTtcclxuICAgIH1cclxuICAgIGxldCB1cmlTdHJpbmc6IHN0cmluZztcclxuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHVyaVN0cmluZyA9IHF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChxdWVyeSBpbnN0YW5jZW9mIEVudGl0eVF1ZXJ5KSB7XHJcbiAgICAgIHVyaVN0cmluZyA9IHRoaXMuZGF0YVNlcnZpY2UudXJpQnVpbGRlciEuYnVpbGRVcmkocXVlcnksIHRoaXMubWV0YWRhdGFTdG9yZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gcmVjb2duaXplIHF1ZXJ5IHBhcmFtZXRlciBhcyBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gRW50aXR5UXVlcnlcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5xdWFsaWZ5VXJsKHVyaVN0cmluZyk7XHJcbiAgfVxyXG5cclxuICB2aXNpdEFuZE1lcmdlKG5vZGVzOiBhbnlbXSwgbm9kZUNvbnRleHQ6IGFueSkge1xyXG4gICAgbGV0IHF1ZXJ5ID0gdGhpcy5xdWVyeTtcclxuICAgIGxldCBqcmEgPSB0aGlzLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAgIG5vZGVDb250ZXh0ID0gbm9kZUNvbnRleHQgfHwge307XHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICBsZXQgcmVzdWx0ID0gY29yZS5tYXAobm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgIGlmIChxdWVyeSA9PSBudWxsICYmIG5vZGUuZW50aXR5QXNwZWN0KSB7XHJcbiAgICAgICAgLy8gZG9uJ3QgYm90aGVyIG1lcmdpbmcgYSByZXN1bHQgZnJvbSBhIHNhdmUgdGhhdCB3YXMgbm90IHJldHVybmVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAgICBpZiAobm9kZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpIHtcclxuICAgICAgICAgIHRoYXQuZW50aXR5TWFuYWdlci5kZXRhY2hFbnRpdHkobm9kZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5vZGUuZW50aXR5QXNwZWN0LmFjY2VwdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBtZXRhID0ganJhLnZpc2l0Tm9kZShub2RlLCB0aGF0LCBub2RlQ29udGV4dCkgfHwge307XHJcbiAgICAgIG5vZGUgPSBtZXRhLm5vZGUgfHwgbm9kZTtcclxuICAgICAgaWYgKHF1ZXJ5ICYmIG5vZGVDb250ZXh0Lm5vZGVUeXBlID09PSBcInJvb3RcIiAmJiAhbWV0YS5lbnRpdHlUeXBlKSB7XHJcbiAgICAgICAgbWV0YS5lbnRpdHlUeXBlID0gcXVlcnkgaW5zdGFuY2VvZiBFbnRpdHlRdWVyeSAmJiAgcXVlcnkuX2dldFRvRW50aXR5VHlwZSAmJiBxdWVyeS5fZ2V0VG9FbnRpdHlUeXBlKHRoYXQubWV0YWRhdGFTdG9yZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByb2Nlc3NNZXRhKHRoYXQsIG5vZGUsIG1ldGEpO1xyXG4gICAgfSwgdGhpcy5tZXJnZU9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpO1xyXG5cclxuICAgIGlmIChyZXN1bHQuZmlsdGVyICYmICF0aGlzLm1lcmdlT3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xyXG4gICAgICAvLyByZXN1bHQgbWF5IGhhdmUgZGVsZXRlZCBlbnRpdGllcyBiZWNhdXNlIHJlbGF0ZWQgbm9kZXMgd2VyZSBwcm9jZXNzZWRcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoeDogYW55KSA9PiB4ICYmICgheC5lbnRpdHlBc3BlY3QgfHwgIXguZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NEZWZlcnJlZCgpIHtcclxuICAgIGlmICh0aGlzLmRlZmVycmVkRm5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5kZWZlcnJlZEZucy5mb3JFYWNoKChmbikgPT4ge1xyXG4gICAgICAgIGZuKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5NYXBwaW5nQ29udGV4dC5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiTWFwcGluZ0NvbnRleHRcIjtcclxuXHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzTWV0YShtYzogTWFwcGluZ0NvbnRleHQsIG5vZGU6IGFueSwgbWV0YTogTm9kZU1ldGEsIGFzc2lnbkZuPzogKHZhbDogYW55KSA9PiB2b2lkKSB7XHJcbiAgLy8gPT0gaXMgZGVsaWJlcmF0ZSBoZXJlIGluc3RlYWQgb2YgPT09XHJcbiAgaWYgKG1ldGEuaWdub3JlIHx8IG5vZGUgPT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfSBlbHNlIGlmIChtZXRhLm5vZGVSZWZJZCkge1xyXG4gICAgbGV0IHJlZlZhbHVlID0gcmVzb2x2ZUVudGl0eVJlZihtYywgbWV0YS5ub2RlUmVmSWQpO1xyXG4gICAgaWYgKHR5cGVvZiByZWZWYWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIGFzc2lnbkZuICE9IG51bGwpIHtcclxuICAgICAgbWMuZGVmZXJyZWRGbnMucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYXNzaWduRm4ocmVmVmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZGVmZXJyZWQgYW5kIHdpbGwgYmUgc2V0IGxhdGVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlZlZhbHVlO1xyXG4gIH0gZWxzZSBpZiAobWV0YS5lbnRpdHlUeXBlKSB7XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IG1ldGEuZW50aXR5VHlwZTtcclxuICAgIGlmIChtYy5tZXJnZU9wdGlvbnMubm9UcmFja2luZykge1xyXG4gICAgICBub2RlID0gcHJvY2Vzc05vTWVyZ2UobWMsIGVudGl0eVR5cGUsIG5vZGUpO1xyXG4gICAgICBpZiAoZW50aXR5VHlwZS5ub1RyYWNraW5nRm4pIHtcclxuICAgICAgICBub2RlID0gZW50aXR5VHlwZS5ub1RyYWNraW5nRm4obm9kZSwgZW50aXR5VHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1ldGEubm9kZUlkKSB7XHJcbiAgICAgICAgbWMucmVmTWFwW21ldGEubm9kZUlkXSA9IG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZW50aXR5VHlwZS5pc0NvbXBsZXhUeXBlKSB7XHJcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIGRvIHNlcnZlck5hbWUgdG8gY2xpZW50IG5hbWUgcHJvY2Vzc2luZ1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzTm9NZXJnZShtYywgZW50aXR5VHlwZSwgbm9kZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG1lcmdlRW50aXR5KG1jLCBub2RlLCBtZXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcblxyXG4gICAgaWYgKCghbWV0YS5wYXNzVGhydSkgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmICEgY29yZS5pc0RhdGUobm9kZSkpIHtcclxuICAgICAgbm9kZSA9IHByb2Nlc3NBbm9uVHlwZShtYywgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRpbmcgdGhlIHJlZk1hcCBmb3IgZW50aXRpZXMgaXMgaGFuZGxlZCBieSB1cGRhdGVFbnRpdHlSZWYgZm9yIGVudGl0aWVzLlxyXG4gICAgaWYgKG1ldGEubm9kZUlkKSB7XHJcbiAgICAgIG1jLnJlZk1hcFttZXRhLm5vZGVJZF0gPSBub2RlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzTm9NZXJnZShtYzogTWFwcGluZ0NvbnRleHQsIHN0eXBlOiBTdHJ1Y3R1cmFsVHlwZSwgbm9kZTogYW55KSB7XHJcbiAgbGV0IHJlc3VsdCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT47XHJcblxyXG4gIHN0eXBlLmRhdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGRwKSB7XHJcbiAgICBpZiAoZHAuaXNDb21wbGV4UHJvcGVydHkpIHtcclxuICAgICAgcmVzdWx0W2RwLm5hbWVdID0gY29yZS5tYXAobm9kZVtkcC5uYW1lT25TZXJ2ZXJdLCAodjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NOb01lcmdlKG1jLCBkcC5kYXRhVHlwZSBhcyBhbnksIHYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdFtkcC5uYW1lXSA9IERhdGFUeXBlLnBhcnNlUmF3VmFsdWUobm9kZVtkcC5uYW1lT25TZXJ2ZXJdLCBkcC5kYXRhVHlwZSBhcyBEYXRhVHlwZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIChzdHlwZSBpbnN0YW5jZW9mIEVudGl0eVR5cGUpICYmIHN0eXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goIChucCkgPT4ge1xyXG4gICAgbGV0IG5vZGVDb250ZXh0ID0geyBub2RlVHlwZTogXCJuYXZQcm9wXCIsIG5hdmlnYXRpb25Qcm9wZXJ0eTogbnAgfTtcclxuICAgIHZpc2l0Tm9kZShub2RlW25wLm5hbWVPblNlcnZlcl0sIG1jLCBub2RlQ29udGV4dCwgcmVzdWx0LCBucC5uYW1lKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0Fub25UeXBlKG1jOiBNYXBwaW5nQ29udGV4dCwgbm9kZTogYW55KSB7XHJcbiAgLy8gbm9kZSBpcyBndWFyYW50ZWVkIHRvIGJlIGFuIG9iamVjdCBieSB0aGlzIHBvaW50LCBpLmUuIG5vdCBhIHNjYWxhclxyXG4gIGxldCBrZXlGbiA9IG1jLm1ldGFkYXRhU3RvcmUubmFtaW5nQ29udmVudGlvbi5zZXJ2ZXJQcm9wZXJ0eU5hbWVUb0NsaWVudDtcclxuICBsZXQgcmVzdWx0ID0ge307XHJcblxyXG4gIGNvcmUub2JqZWN0Rm9yRWFjaChub2RlLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgbGV0IG5ld0tleSA9IGtleUZuKGtleSk7XHJcbiAgICBsZXQgbm9kZUNvbnRleHQgPSB7IG5vZGVUeXBlOiBcImFub25Qcm9wXCIsIHByb3BlcnR5TmFtZTogbmV3S2V5IH07XHJcbiAgICB2aXNpdE5vZGUodmFsdWUsIG1jLCBub2RlQ29udGV4dCwgcmVzdWx0LCBuZXdLZXkpO1xyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlOiBhbnksIG1jOiBNYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ6IE5vZGVDb250ZXh0LCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGtleTogc3RyaW5nKSB7XHJcbiAgbGV0IGpyYSA9IG1jLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICBsZXQgbWV0YSA9IGpyYS52aXNpdE5vZGUobm9kZSwgbWMsIG5vZGVDb250ZXh0KSB8fCB7fTtcclxuICAvLyBhbGxvd3MgdmlzaXROb2RlIHRvIGNoYW5nZSB0aGUgdmFsdWU7XHJcbiAgbm9kZSA9IG1ldGEubm9kZSB8fCBub2RlO1xyXG5cclxuICBpZiAobWV0YS5pZ25vcmUpIHJldHVybjtcclxuICBpZiAobWV0YS5wYXNzVGhydSkgcmV0dXJuIG5vZGU7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcclxuICAgIG5vZGVDb250ZXh0Lm5vZGVUeXBlID0gbm9kZUNvbnRleHQubm9kZVR5cGUgKyBcIkl0ZW1cIjtcclxuICAgIHJlc3VsdFtrZXldID0gbm9kZS5tYXAoZnVuY3Rpb24gKHYsIGl4KSB7XHJcbiAgICAgIG1ldGEgPSBqcmEudmlzaXROb2RlKHYsIG1jLCBub2RlQ29udGV4dCkgfHwge307XHJcbiAgICAgIHYgPSBtZXRhLm5vZGUgfHwgdjtcclxuICAgICAgcmV0dXJuIHByb2Nlc3NNZXRhKG1jLCB2LCBtZXRhLCBmdW5jdGlvbiAocmVmVmFsdWUpIHtcclxuICAgICAgICByZXN1bHRba2V5XVtpeF0gPSByZWZWYWx1ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXN1bHRba2V5XSA9IHByb2Nlc3NNZXRhKG1jLCBub2RlLCBtZXRhLCBmdW5jdGlvbiAocmVmVmFsdWUpIHtcclxuICAgICAgcmVzdWx0W2tleV0gPSByZWZWYWx1ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlRW50aXR5UmVmKG1jOiBNYXBwaW5nQ29udGV4dCwgbm9kZVJlZklkOiBzdHJpbmcpIHtcclxuICBsZXQgZW50aXR5ID0gbWMucmVmTWFwW25vZGVSZWZJZF07XHJcbiAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWMucmVmTWFwW25vZGVSZWZJZF07XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZW50aXR5O1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRW50aXR5UmVmKG1jOiBNYXBwaW5nQ29udGV4dCwgdGFyZ2V0RW50aXR5OiBhbnksIG5vZGU6IGFueSkge1xyXG4gIGxldCBub2RlSWQgPSBub2RlLl8kbWV0YS5ub2RlSWQ7XHJcbiAgaWYgKCFub2RlSWQgJiYgbm9kZS5fJG1ldGEuZXh0cmFNZXRhZGF0YSkge1xyXG4gICAgLy8gb2RhdGEgY2FzZS4gIHJlZk1hcCBpc24ndCByZWFsbHkgdXNlZCwgYnV0IGlzIHJldHVybmVkIGFzIGRhdGEucmV0cmlldmVkRW50aXRpZXMsIHNvIHdlIHBvcHVsYXRlZCBpdCBhbnl3YXkuXHJcbiAgICBub2RlSWQgPSBub2RlLl8kbWV0YS5leHRyYU1ldGFkYXRhLnVyaUtleTtcclxuICB9XHJcbiAgaWYgKG5vZGVJZCAhPSBudWxsKSB7XHJcbiAgICBtYy5yZWZNYXBbbm9kZUlkXSA9IHRhcmdldEVudGl0eTtcclxuICB9XHJcbn1cclxuXHJcbi8vIGNhbiByZXR1cm4gbnVsbCBmb3IgYSBkZWxldGVkIGVudGl0eSBpZiBpbmNsdWRlRGVsZXRlZCA9PSBmYWxzZVxyXG5mdW5jdGlvbiBtZXJnZUVudGl0eShtYzogTWFwcGluZ0NvbnRleHQsIG5vZGU6IGFueSwgbWV0YTogTm9kZU1ldGEpIHtcclxuICBub2RlLl8kbWV0YSA9IG1ldGE7XHJcbiAgbGV0IGVtID0gbWMuZW50aXR5TWFuYWdlcjtcclxuXHJcbiAgbGV0IGVudGl0eVR5cGUgPSBtZXRhLmVudGl0eVR5cGUgYXMgRW50aXR5VHlwZTtcclxuICBpZiAodHlwZW9mIChlbnRpdHlUeXBlKSA9PT0gJ3N0cmluZycpIHtcclxuICAgIGVudGl0eVR5cGUgPSBtYy5tZXRhZGF0YVN0b3JlLl9nZXRTdHJ1Y3R1cmFsVHlwZShlbnRpdHlUeXBlLCBmYWxzZSkgYXMgRW50aXR5VHlwZTtcclxuICB9XHJcbiAgbm9kZS5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcclxuXHJcbiAgbGV0IG1lcmdlU3RyYXRlZ3kgPSBtYy5tZXJnZU9wdGlvbnMubWVyZ2VTdHJhdGVneTtcclxuICBsZXQgaXNTYXZpbmcgPSBtYy5xdWVyeSA9PSBudWxsO1xyXG5cclxuICBsZXQgZW50aXR5S2V5ID0gZW50aXR5VHlwZS5nZXRFbnRpdHlLZXlGcm9tUmF3RW50aXR5KG5vZGUsIG1jLnJhd1ZhbHVlRm4pO1xyXG4gIGxldCB0YXJnZXRFbnRpdHkgPSBlbS5nZXRFbnRpdHlCeUtleShlbnRpdHlLZXkpO1xyXG4gIGlmICh0YXJnZXRFbnRpdHkpIHtcclxuICAgIGlmIChpc1NhdmluZyAmJiB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgIGVtLmRldGFjaEVudGl0eSh0YXJnZXRFbnRpdHkpO1xyXG4gICAgICByZXR1cm4gdGFyZ2V0RW50aXR5O1xyXG4gICAgfVxyXG4gICAgbGV0IHRhcmdldEVudGl0eVN0YXRlID0gdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICAgIGlmIChtZXJnZVN0cmF0ZWd5ID09PSBNZXJnZVN0cmF0ZWd5LkRpc2FsbG93ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBNZXJnZVN0cmF0ZWd5IG9mICdEaXNhbGxvd2VkJyBwcmV2ZW50cyBcIiArIGVudGl0eUtleS50b1N0cmluZygpICsgXCIgZnJvbSBiZWluZyBtZXJnZWRcIik7XHJcbiAgICB9IGVsc2UgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IE1lcmdlU3RyYXRlZ3kuU2tpcE1lcmdlKSB7XHJcbiAgICAgIHVwZGF0ZUVudGl0eU5vTWVyZ2UobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5PdmVyd3JpdGVDaGFuZ2VzXHJcbiAgICAgICAgfHwgdGFyZ2V0RW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKSkge1xyXG4gICAgICAgIHVwZGF0ZUVudGl0eShtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0Lndhc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKG1ldGEuZXh0cmFNZXRhZGF0YSkge1xyXG4gICAgICAgICAgdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5leHRyYU1ldGFkYXRhID0gbWV0YS5leHRyYU1ldGFkYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlID0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkO1xyXG4gICAgICAgIGNsZWFyT3JpZ2luYWxWYWx1ZXModGFyZ2V0RW50aXR5KTtcclxuICAgICAgICAvLyBwcm9wZXJ0eU5hbWUgbm90IHNwZWNpZmllZCBiZWNhdXNlIG11bHRpcGxlIHByb3BzIEVudGl0eUNoYW5nZWRFdmVudEFyZ3NcclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5OiB0YXJnZXRFbnRpdHksIHByb3BlcnR5TmFtZTogbnVsbCB9KTtcclxuICAgICAgICBsZXQgYWN0aW9uID0gaXNTYXZpbmcgPyBFbnRpdHlBY3Rpb24uTWVyZ2VPblNhdmUgOiBFbnRpdHlBY3Rpb24uTWVyZ2VPblF1ZXJ5O1xyXG4gICAgICAgIGVtLmVudGl0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eUFjdGlvbjogYWN0aW9uLCBlbnRpdHk6IHRhcmdldEVudGl0eSB9KTtcclxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byBoYW5kbGUgYW4gb3ZlcndyaXRlIG9mIGEgbW9kaWZpZWQgZW50aXR5IHdpdGggYW4gdW5jaGFuZ2VkIGVudGl0eVxyXG4gICAgICAgIC8vIHdoaWNoIG1pZ2h0IGluIHR1cm4gY2F1c2UgX2hhc0NoYW5nZXMgdG8gY2hhbmdlLlxyXG4gICAgICAgIGlmICghdGFyZ2V0RW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKSkge1xyXG4gICAgICAgICAgZW0uX25vdGlmeVN0YXRlQ2hhbmdlKHRhcmdldEVudGl0eSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBwcm9jZXNzIHRhcmdldEVudGl0eSAoZXZlbiBpZiBkZWxldGVkKSB0byBlbnN1cmUgcmVsYXRlZCBub2RlcyBhcmUgaGFuZGxlZFxyXG4gICAgICAgIHVwZGF0ZUVudGl0eU5vTWVyZ2UobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgICAgICAgaWYgKHRhcmdldEVudGl0eVN0YXRlID09PSBFbnRpdHlTdGF0ZS5EZWxldGVkICYmICFtYy5tZXJnZU9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0YXJnZXRFbnRpdHkgPSBlbnRpdHlUeXBlLl9jcmVhdGVJbnN0YW5jZUNvcmUoKSBhcyBFbnRpdHk7XHJcblxyXG4gICAgdXBkYXRlRW50aXR5KG1jLCB0YXJnZXRFbnRpdHksIG5vZGUpO1xyXG5cclxuICAgIGlmIChtZXRhLmV4dHJhTWV0YWRhdGEpIHtcclxuICAgICAgdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5leHRyYU1ldGFkYXRhID0gbWV0YS5leHRyYU1ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgLy8gZW0uX2F0dGFjaEVudGl0eUNvcmUodGFyZ2V0RW50aXR5LCBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQsIE1lcmdlU3RyYXRlZ3kuRGlzYWxsb3dlZCk7XHJcbiAgICBlbS5fYXR0YWNoRW50aXR5Q29yZSh0YXJnZXRFbnRpdHksIEVudGl0eVN0YXRlLlVuY2hhbmdlZCwgbWVyZ2VTdHJhdGVneSk7XHJcbiAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0Lndhc0xvYWRlZCA9IHRydWU7XHJcbiAgICBlbS5lbnRpdHlDaGFuZ2VkLnB1Ymxpc2goeyBlbnRpdHlBY3Rpb246IEVudGl0eUFjdGlvbi5BdHRhY2hPblF1ZXJ5LCBlbnRpdHk6IHRhcmdldEVudGl0eSB9KTtcclxuICB9XHJcbiAgcmV0dXJuIHRhcmdldEVudGl0eTtcclxufVxyXG5cclxuLy8gY29waWVkIGZyb20gZW50aXR5QXNwZWN0XHJcbmZ1bmN0aW9uIGNsZWFyT3JpZ2luYWxWYWx1ZXModGFyZ2V0OiBhbnkpIHtcclxuICBsZXQgYXNwZWN0ID0gdGFyZ2V0LmVudGl0eUFzcGVjdCB8fCB0YXJnZXQuY29tcGxleEFzcGVjdDtcclxuICBhc3BlY3Qub3JpZ2luYWxWYWx1ZXMgPSB7fTtcclxuICBsZXQgc3R5cGUgPSB0YXJnZXQuZW50aXR5VHlwZSB8fCB0YXJnZXQuY29tcGxleFR5cGU7XHJcbiAgc3R5cGUuY29tcGxleFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoY3A6IGFueSkge1xyXG4gICAgbGV0IGNvcyA9IHRhcmdldC5nZXRQcm9wZXJ0eShjcC5uYW1lKTtcclxuICAgIGlmIChjcC5pc1NjYWxhcikge1xyXG4gICAgICBjbGVhck9yaWdpbmFsVmFsdWVzKGNvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3MuX2FjY2VwdENoYW5nZXMoKTtcclxuICAgICAgY29zLmZvckVhY2goY2xlYXJPcmlnaW5hbFZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiB1cGRhdGVFbnRpdHlOb01lcmdlKG1jOiBNYXBwaW5nQ29udGV4dCwgdGFyZ2V0RW50aXR5OiBFbnRpdHksIG5vZGU6IGFueSkge1xyXG4gIHVwZGF0ZUVudGl0eVJlZihtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAvLyB3ZSBzdGlsbCBuZWVkIHRvIG1lcmdlIHJlbGF0ZWQgZW50aXRpZXMgZXZlbiBpZiB0b3AgbGV2ZWwgZW50aXR5IHdhc24ndCBtb2RpZmllZC5cclxuICBub2RlLmVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAobnA6IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gICAgaWYgKG5wLmlzU2NhbGFyKSB7XHJcbiAgICAgIG1lcmdlUmVsYXRlZEVudGl0eUNvcmUobWMsIG5vZGUsIG5wKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1lcmdlUmVsYXRlZEVudGl0aWVzQ29yZShtYywgbm9kZSwgbnApO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVFbnRpdHkobWM6IE1hcHBpbmdDb250ZXh0LCB0YXJnZXRFbnRpdHk6IEVudGl0eSwgbm9kZTogYW55KSB7XHJcbiAgdXBkYXRlRW50aXR5UmVmKG1jLCB0YXJnZXRFbnRpdHksIG5vZGUpO1xyXG4gIGxldCBlbnRpdHlUeXBlID0gdGFyZ2V0RW50aXR5LmVudGl0eVR5cGU7XHJcbiAgZW50aXR5VHlwZS5fdXBkYXRlVGFyZ2V0RnJvbVJhdyh0YXJnZXRFbnRpdHksIG5vZGUsIG1jLnJhd1ZhbHVlRm4pO1xyXG5cclxuICBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5wKSB7XHJcbiAgICBpZiAobnAuaXNTY2FsYXIpIHtcclxuICAgICAgbWVyZ2VSZWxhdGVkRW50aXR5KG1jLCBucCwgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1lcmdlUmVsYXRlZEVudGl0aWVzKG1jLCBucCwgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWVyZ2VSZWxhdGVkRW50aXR5KG1jOiBNYXBwaW5nQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHksIHRhcmdldEVudGl0eTogRW50aXR5LCByYXdFbnRpdHk6IGFueSkge1xyXG5cclxuICBsZXQgcmVsYXRlZEVudGl0eSA9IG1lcmdlUmVsYXRlZEVudGl0eUNvcmUobWMsIHJhd0VudGl0eSwgbmF2aWdhdGlvblByb3BlcnR5KTtcclxuICBpZiAocmVsYXRlZEVudGl0eSA9PSBudWxsKSByZXR1cm47XHJcbiAgaWYgKHR5cGVvZiByZWxhdGVkRW50aXR5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBtYy5kZWZlcnJlZEZucy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmVsYXRlZEVudGl0eSA9IHJlbGF0ZWRFbnRpdHkoKTtcclxuICAgICAgdXBkYXRlUmVsYXRlZEVudGl0eShyZWxhdGVkRW50aXR5LCB0YXJnZXRFbnRpdHksIG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdXBkYXRlUmVsYXRlZEVudGl0eShyZWxhdGVkRW50aXR5LCB0YXJnZXRFbnRpdHksIG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtZXJnZVJlbGF0ZWRFbnRpdGllcyhtYzogTWFwcGluZ0NvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LCB0YXJnZXRFbnRpdHk6IEVudGl0eSwgcmF3RW50aXR5OiBhbnkpIHtcclxuICBsZXQgcmVsYXRlZEVudGl0aWVzID0gbWVyZ2VSZWxhdGVkRW50aXRpZXNDb3JlKG1jLCByYXdFbnRpdHksIG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgaWYgKHJlbGF0ZWRFbnRpdGllcyA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gIGxldCBpbnZlcnNlUHJvcGVydHkgPSBuYXZpZ2F0aW9uUHJvcGVydHkuaW52ZXJzZTtcclxuICBpZiAoIWludmVyc2VQcm9wZXJ0eSkgcmV0dXJuO1xyXG5cclxuICBsZXQgb3JpZ2luYWxSZWxhdGVkRW50aXRpZXMgPSB0YXJnZXRFbnRpdHkuZ2V0UHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5Lm5hbWUpO1xyXG4gIG9yaWdpbmFsUmVsYXRlZEVudGl0aWVzLndhc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gIHJlbGF0ZWRFbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWxhdGVkRW50aXR5OiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgcmVsYXRlZEVudGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBtYy5kZWZlcnJlZEZucy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZWxhdGVkRW50aXR5ID0gcmVsYXRlZEVudGl0eSgpO1xyXG4gICAgICAgIHVwZGF0ZVJlbGF0ZWRFbnRpdHlJbkNvbGxlY3Rpb24obWMsIHJlbGF0ZWRFbnRpdHksIG9yaWdpbmFsUmVsYXRlZEVudGl0aWVzLCB0YXJnZXRFbnRpdHksIGludmVyc2VQcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVwZGF0ZVJlbGF0ZWRFbnRpdHlJbkNvbGxlY3Rpb24obWMsIHJlbGF0ZWRFbnRpdHksIG9yaWdpbmFsUmVsYXRlZEVudGl0aWVzLCB0YXJnZXRFbnRpdHksIGludmVyc2VQcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtZXJnZVJlbGF0ZWRFbnRpdHlDb3JlKG1jOiBNYXBwaW5nQ29udGV4dCwgcmF3RW50aXR5OiBhbnksIG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgbGV0IHJlbGF0ZWRSYXdFbnRpdHkgPSByYXdFbnRpdHlbbmF2aWdhdGlvblByb3BlcnR5Lm5hbWVPblNlcnZlcl07XHJcbiAgaWYgKCFyZWxhdGVkUmF3RW50aXR5KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgbGV0IHJlbGF0ZWRFbnRpdHkgPSBtYy52aXNpdEFuZE1lcmdlKHJlbGF0ZWRSYXdFbnRpdHksIHsgbm9kZVR5cGU6IFwibmF2UHJvcFwiLCBuYXZpZ2F0aW9uUHJvcGVydHk6IG5hdmlnYXRpb25Qcm9wZXJ0eSB9KTtcclxuICByZXR1cm4gcmVsYXRlZEVudGl0eTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWVyZ2VSZWxhdGVkRW50aXRpZXNDb3JlKG1jOiBNYXBwaW5nQ29udGV4dCwgcmF3RW50aXR5OiBhbnksIG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgbGV0IHJlbGF0ZWRSYXdFbnRpdGllcyA9IHJhd0VudGl0eVtuYXZpZ2F0aW9uUHJvcGVydHkubmFtZU9uU2VydmVyXTtcclxuICBpZiAoIXJlbGF0ZWRSYXdFbnRpdGllcykgcmV0dXJuIG51bGw7XHJcblxyXG4gIC8vIG5lZWRlZCBpZiB3aGF0IGlzIHJldHVybmVkIGlzIG5vdCBhbiBhcnJheSBhbmQgd2UgZXhwZWN0IG9uZSAtIHRoaXMgaGFwcGVucyB3aXRoIF9fZGVmZXJyZWQgaW4gT0RhdGEuXHJcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlbGF0ZWRSYXdFbnRpdGllcykpIHtcclxuICAgIC8vIHJldHVybiBudWxsO1xyXG4gICAgcmVsYXRlZFJhd0VudGl0aWVzID0gcmVsYXRlZFJhd0VudGl0aWVzLnJlc3VsdHM7IC8vIE9EYXRhIHYzIHdpbGwgbG9vayBsaWtlIHRoaXMgd2l0aCBhbiBleHBhbmRcclxuICAgIGlmICghcmVsYXRlZFJhd0VudGl0aWVzKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV0IHJlbGF0ZWRFbnRpdGllcyA9IG1jLnZpc2l0QW5kTWVyZ2UocmVsYXRlZFJhd0VudGl0aWVzLCB7IG5vZGVUeXBlOiBcIm5hdlByb3BJdGVtXCIsIG5hdmlnYXRpb25Qcm9wZXJ0eTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xyXG4gIHJldHVybiByZWxhdGVkRW50aXRpZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZWRFbnRpdHkocmVsYXRlZEVudGl0eTogRW50aXR5LCB0YXJnZXRFbnRpdHk6IEVudGl0eSwgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICBpZiAoIXJlbGF0ZWRFbnRpdHkpIHJldHVybjtcclxuICBsZXQgcHJvcE5hbWUgPSBuYXZpZ2F0aW9uUHJvcGVydHkubmFtZTtcclxuICBsZXQgY3VycmVudFJlbGF0ZWRFbnRpdHkgPSB0YXJnZXRFbnRpdHkuZ2V0UHJvcGVydHkocHJvcE5hbWUpO1xyXG5cclxuICAvLyBjaGVjayBpZiB0aGUgcmVsYXRlZCBlbnRpdHkgaXMgYWxyZWFkeSBob29rZWQgdXBcclxuICBpZiAoY3VycmVudFJlbGF0ZWRFbnRpdHkgIT09IHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgIC8vIGlmIG5vdCBob29rIHVwIGJvdGggZGlyZWN0aW9ucy5cclxuICAgIHRhcmdldEVudGl0eS5zZXRQcm9wZXJ0eShwcm9wTmFtZSwgcmVsYXRlZEVudGl0eSk7XHJcbiAgICBsZXQgaW52ZXJzZVByb3BlcnR5ID0gbmF2aWdhdGlvblByb3BlcnR5LmludmVyc2U7XHJcbiAgICBpZiAoIWludmVyc2VQcm9wZXJ0eSkgcmV0dXJuO1xyXG4gICAgaWYgKGludmVyc2VQcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgICByZWxhdGVkRW50aXR5LnNldFByb3BlcnR5KGludmVyc2VQcm9wZXJ0eS5uYW1lLCB0YXJnZXRFbnRpdHkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvbGxlY3Rpb24gPSByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludmVyc2VQcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgY29sbGVjdGlvbi5wdXNoKHRhcmdldEVudGl0eSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlUmVsYXRlZEVudGl0eUluQ29sbGVjdGlvbihtYzogTWFwcGluZ0NvbnRleHQsIHJlbGF0ZWRFbnRpdHk6IEVudGl0eSB8IHVuZGVmaW5lZCxcclxuICAgIHJlbGF0ZWRFbnRpdGllczogRW50aXR5W10sIHRhcmdldEVudGl0eTogRW50aXR5LCBpbnZlcnNlUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gIGlmICghcmVsYXRlZEVudGl0eSkgcmV0dXJuO1xyXG5cclxuICAvLyBkb24ndCB1cGRhdGUgcmVsYXRlZENvbGxlY3Rpb24gaWYgcHJlc2VydmVDaGFuZ2VzICYgcmVsYXRlZEVudGl0eSBoYXMgYW4gZmtDaGFuZ2UuXHJcbiAgaWYgKHJlbGF0ZWRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZFxyXG4gICAgJiYgbWMubWVyZ2VPcHRpb25zLm1lcmdlU3RyYXRlZ3kgPT09IE1lcmdlU3RyYXRlZ3kuUHJlc2VydmVDaGFuZ2VzKSB7XHJcbiAgICBsZXQgb3JpZ1ZhbHVlcyA9IHJlbGF0ZWRFbnRpdHkuZW50aXR5QXNwZWN0Lm9yaWdpbmFsVmFsdWVzO1xyXG4gICAgbGV0IGZrV2FzTW9kaWZpZWQgPSBpbnZlcnNlUHJvcGVydHkucmVsYXRlZERhdGFQcm9wZXJ0aWVzLnNvbWUoZnVuY3Rpb24gKGRwKSB7XHJcbiAgICAgIHJldHVybiBvcmlnVmFsdWVzW2RwLm5hbWVdICE9IHVuZGVmaW5lZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGZrV2FzTW9kaWZpZWQpIHJldHVybjtcclxuICB9XHJcbiAgLy8gY2hlY2sgaWYgdGhlIHJlbGF0ZWQgZW50aXR5IGlzIGFscmVhZHkgaG9va2VkIHVwXHJcbiAgbGV0IHRoaXNFbnRpdHkgPSByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludmVyc2VQcm9wZXJ0eS5uYW1lKTtcclxuXHJcbiAgaWYgKHRoaXNFbnRpdHkgIT09IHRhcmdldEVudGl0eSkge1xyXG4gICAgLy8gaWYgbm90IC0gaG9vayBpdCB1cC5cclxuICAgIHJlbGF0ZWRFbnRpdGllcy5wdXNoKHJlbGF0ZWRFbnRpdHkpO1xyXG4gICAgcmVsYXRlZEVudGl0eS5zZXRQcm9wZXJ0eShpbnZlcnNlUHJvcGVydHkubmFtZSwgdGFyZ2V0RW50aXR5KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=