@bitgo-beta/sdk-coin-xrp 1.3.3-alpha.267 → 1.3.3-alpha.269

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.7.7](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.7.6...@bitgo/sdk-coin-xrp@3.7.7) (2025-02-11)
7
+
8
+ **Note:** Version bump only for package @bitgo/sdk-coin-xrp
9
+
6
10
  ## [3.7.6](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.7.5...@bitgo/sdk-coin-xrp@3.7.6) (2025-02-05)
7
11
 
8
12
  ### Bug Fixes
package/dist/src/xrp.d.ts CHANGED
@@ -37,6 +37,8 @@ export declare class Xrp extends BaseCoin {
37
37
  * Get fee info from server
38
38
  */
39
39
  getFeeInfo(): Promise<FeeInfo>;
40
+ /** @inheritdoc */
41
+ valuelessTransferAllowed(): boolean;
40
42
  getTokenEnablementConfig(): TokenEnablementConfig;
41
43
  /**
42
44
  * Assemble keychain and half-sign prebuilt transaction
@@ -1 +1 @@
1
- {"version":3,"file":"xrp.d.ts","sourceRoot":"","sources":["../../src/xrp.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,QAAQ,EACR,SAAS,EAIT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EAEvB,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAkB,MAAM,qBAAqB,CAAC;AAKlF,OAAO,EACL,yBAAyB,EACzB,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAMrB,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAQ/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC,wBAAwB,IAAI,qBAAqB;IAOxD;;;;;;OAMG;IACU,eAAe,CAAC,EAC3B,UAAU,EACV,GAAG,EACH,eAAe,GAChB,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAAC;IAkChF;;;;;OAKG;IACG,wBAAwB,CAC5B,YAAY,EAAE,+BAA+B,GAC5C,OAAO,CAAC,+BAA+B,CAAC;IAe3C;;;OAGG;IACG,kBAAkB,CAAC,MAAM,GAAE,yBAA8B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgGjG;;;;;;OAMG;IACU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDpG;;;;;;OAMG;IACU,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0C9F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;;;;;;;;;OAUG;IACU,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,mBAAmB,CAAC;IAqN7E,eAAe,CAAC,MAAM,KAAA,EAAE,WAAW,KAAA;;;;IAiFhD;;;OAGG;IACI,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYxC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpF"}
1
+ {"version":3,"file":"xrp.d.ts","sourceRoot":"","sources":["../../src/xrp.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,QAAQ,EACR,SAAS,EAIT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EAEvB,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAkB,MAAM,qBAAqB,CAAC;AAKlF,OAAO,EACL,yBAAyB,EACzB,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAMrB,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAQ/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3C,kBAAkB;IAClB,wBAAwB,IAAI,OAAO;IAI5B,wBAAwB,IAAI,qBAAqB;IAOxD;;;;;;OAMG;IACU,eAAe,CAAC,EAC3B,UAAU,EACV,GAAG,EACH,eAAe,GAChB,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAAC;IAkChF;;;;;OAKG;IACG,wBAAwB,CAC5B,YAAY,EAAE,+BAA+B,GAC5C,OAAO,CAAC,+BAA+B,CAAC;IAe3C;;;OAGG;IACG,kBAAkB,CAAC,MAAM,GAAE,yBAA8B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgGjG;;;;;;OAMG;IACU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDpG;;;;;;OAMG;IACU,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0C9F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;;;;;;;;;OAUG;IACU,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,mBAAmB,CAAC;IAqN7E,eAAe,CAAC,MAAM,KAAA,EAAE,WAAW,KAAA;;;;IAiFhD;;;OAGG;IACI,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYxC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpF"}
package/dist/src/xrp.js CHANGED
@@ -110,6 +110,10 @@ class Xrp extends sdk_core_1.BaseCoin {
110
110
  async getFeeInfo() {
111
111
  return this.bitgo.get(this.url('/public/feeinfo')).result();
112
112
  }
113
+ /** @inheritdoc */
114
+ valuelessTransferAllowed() {
115
+ return true;
116
+ }
113
117
  getTokenEnablementConfig() {
114
118
  return {
115
119
  requiresTokenEnablement: true,
@@ -642,4 +646,4 @@ class Xrp extends sdk_core_1.BaseCoin {
642
646
  }
643
647
  }
644
648
  exports.Xrp = Xrp;
645
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILCtDQUF5QztBQUN6QywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLHlDQUEyQjtBQUUzQixtREFhOEI7QUFDOUIsaURBQWtGO0FBQ2xGLHVFQUF5RDtBQUN6RCxnRUFBa0Q7QUFDbEQsMkNBQTZCO0FBYzdCLDJDQUFzRDtBQUN0RCx3REFBZ0M7QUFDaEMsc0RBQThCO0FBQzlCLCtCQUF5RjtBQUV6RixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsT0FBZTtRQUNuQyxPQUFPLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRU0sd0JBQXdCO1FBQzdCLE9BQU87WUFDTCx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLGdDQUFnQyxFQUFFLEtBQUs7U0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQzNCLFVBQVUsRUFDVixHQUFHLEVBQ0gsZUFBZSxHQUNRO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsT0FBTyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBSSxPQUFPLENBQUMsYUFBYSxFQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZFLE1BQU0sRUFBRSxHQUFHLGdCQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDakUsTUFBTSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO1FBRUgsa0hBQWtIO1FBQ2xILGVBQWU7UUFDZixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQzVCLFlBQTZDO1FBRTdDLElBQUksWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztZQUNqRixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxZQUFZLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsU0FBb0MsRUFBRTtRQUM3RCxJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsS0FBSyxJQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBWSxDQUFDO1FBQy9GLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQztnQkFDSCxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLEVBQVUsQ0FBQztRQUNmLHNEQUFzRDtRQUN0RCw0RUFBNEU7UUFDNUUsSUFBSSxDQUFDO1lBQ0gsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDakQsT0FBTztnQkFDTCxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUM7Z0JBQ3JHLEVBQUUsRUFBRSxFQUFFO2dCQUNOLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUUsQ0FBQztnQkFDZixZQUFZLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsRUFBRTtnQkFDWCxHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHO29CQUNwQixPQUFPLEVBQUUsU0FBUztvQkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztpQkFDdkI7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtvQkFDbEMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO2lCQUM3QjthQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3RELE9BQU87Z0JBQ0wsWUFBWSxFQUFFO29CQUNaLElBQUk7b0JBQ0osY0FBYztvQkFDZCxjQUFjO29CQUNkLFNBQVM7b0JBQ1QsZUFBZTtvQkFDZixLQUFLO29CQUNMLFNBQVM7b0JBQ1QsYUFBYTtpQkFDZDtnQkFDRCxFQUFFLEVBQUUsRUFBRTtnQkFDTixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFO29CQUNILEdBQUcsRUFBRSxXQUFXLENBQUMsR0FBRztvQkFDcEIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7aUJBQ3ZCO2dCQUNELE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztnQkFDNUIsV0FBVyxFQUFFO29CQUNYLFFBQVEsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVE7b0JBQzFDLE1BQU0sRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU07b0JBQ3RDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUs7aUJBQ3JDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FDWCxXQUFXLENBQUMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RyxPQUFPO1lBQ0wsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUM7WUFDdkYsRUFBRSxFQUFFLEVBQUU7WUFDTixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDaEMsWUFBWSxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsT0FBTztvQkFDUCxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07aUJBQzNCO2FBQ0Y7WUFDRCxHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHO2dCQUNwQixPQUFPLEVBQUUsU0FBUztnQkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQzthQUN2QjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBNEI7UUFDL0UsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQVksQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNoRCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQzVDLElBQUksVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakQsQ0FBQyxDQUFDO1FBRUYsSUFDRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO1lBQzVELE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO1lBQ2pDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFDbkMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLG9JQUFvSSxDQUN2SixDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxNQUFNLGlCQUFpQixHQUFHLGVBQUssQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzFGLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixJQUFJLGlCQUFpQixLQUFLLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEcsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2pHLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBRWxELElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksaUJBQWlCLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztZQUNqRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUF3QjtRQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQywwQ0FBMEMsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxPQUFPLEVBQUUsT0FBTztvQkFDaEIsWUFBWSxFQUFFLFNBQVM7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJO29CQUNYLE1BQU0sRUFBRSxJQUFJO29CQUNaLFlBQVksRUFBRSxJQUFJO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUUvRixJQUFJLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRixNQUFNLGNBQWMsR0FBRyxlQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxlQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFaEUsSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQUksY0FBYyxDQUFDLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksOEJBQW1CLENBQUMsNkRBQTZELE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLE9BQU8sS0FBSyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksaUNBQXNCLENBQzlCLCtCQUErQixjQUFjLENBQUMsT0FBTyxRQUFRLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUMxRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUF1QjtRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRyxNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQzNCLFlBQVksRUFBRSxTQUFTO29CQUN2QixLQUFLLEVBQUUsSUFBSTtvQkFDWCxNQUFNLEVBQUUsSUFBSTtvQkFDWixZQUFZLEVBQUUsSUFBSTtpQkFDbkI7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUFHO1lBQ3pCLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQzNCLFlBQVksRUFBRSxXQUFXO2lCQUMxQjthQUNGO1NBQ0YsQ0FBQztRQUVGLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBQSwyQkFBZ0IsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFM0UsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sSUFBQSx1QkFBWSxFQUFDO1lBQ3JGLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDbkUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvRCxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzFFLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FDbkUsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQUcsSUFBSSx3QkFBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRixNQUFNLFdBQVcsR0FBRyxJQUFJLHdCQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUN2RyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQ3JCLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FDdkcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUNyQixDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0UsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUN6RSxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckYsOENBQThDO1FBQzlDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXRGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFMUIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUMvQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxLQUFLLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM1QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDcEMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBRUQsc0RBQXNEO1lBQ3RELElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDcEMsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUM7UUFDN0MsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLDRCQUE0QixFQUFFLENBQUM7WUFDbkYsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLDRCQUE0QixDQUFDLEtBQUssNEJBQTRCLEVBQUUsQ0FBQztZQUNuRixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXJELElBQUksa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLDZGQUE2RjtnQkFDN0YsTUFBTSxJQUFJLDhCQUFtQixDQUMzQixnREFBZ0QsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLDhCQUE4QixDQUNyRyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLE9BQU8sQ0FBQyxRQUFRLEVBQUUseUJBQXlCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQzVMLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLGFBQWEsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7Z0JBQy9DLGtCQUFrQjtnQkFDbEIsYUFBYTtnQkFDYixhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixJQUFJO2dCQUNKLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZixXQUFXO2dCQUNYLGFBQWE7Z0JBQ2IsTUFBTTtnQkFDTixRQUFRO2FBQ1QsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBcUIsQ0FBQztRQUNsRSxTQUFTO2FBQ04sRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBNkIsQ0FBQzthQUN4QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDakIsa0JBQWtCLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLCtEQUErRDthQUMzRyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywyQ0FBMkM7YUFDbEYsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTVDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsZ0JBQU0sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFaEcsSUFBSSxpQkFBeUIsQ0FBQztRQUU5QixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsTUFBTSxlQUFlLEdBQUcsZ0JBQU0sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDdEcsaUJBQWlCLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBRUQsTUFBTSxzQkFBc0IsR0FBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRSxLQUFLLEVBQUUsaUJBQWlCO1NBQ3pCLENBQUMsQ0FBaUIsQ0FBQztRQUVwQixzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUM7UUFFakQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwRCxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXO1FBQzlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFJLGVBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBYSxDQUFDLElBQUksQ0FBQztRQUN4RSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXpELElBQUksTUFBTSxDQUFDO1FBQ1gsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3pELE1BQU0sR0FBRyxJQUFJLHdCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWxFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU5QixNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQTBCLENBQUM7UUFDNUUsU0FBUzthQUNOLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7YUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDakIsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQywrREFBK0Q7YUFDdkgsR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJDQUEyQzthQUM5RixRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTVDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBRXpGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsZ0JBQU0sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFaEcsSUFBSSxpQkFBeUIsQ0FBQztRQUU5QixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsTUFBTSxlQUFlLEdBQUcsZ0JBQU0sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDdEcsaUJBQWlCLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBRUQsTUFBTSxzQkFBc0IsR0FBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRSxLQUFLLEVBQUUsaUJBQWlCO1NBQ3pCLENBQUMsQ0FBaUIsQ0FBQztRQUVwQixzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUM7UUFFakQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwRCxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxlQUFlLENBQUMsSUFBYTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQVUsRUFBRSxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBK0I7UUFDcEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUE1cUJELGtCQTRxQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBCaWdOdW1iZXIgfSBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5cbmltcG9ydCB7XG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIGNoZWNrS3JzUHJvdmlkZXIsXG4gIGdldEJpcDMyS2V5cyxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgS2V5UGFpcixcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBwcm9taXNlUHJvcHMsXG4gIFRva2VuRW5hYmxlbWVudENvbmZpZyxcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zLCBYcnBDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgKiBhcyByaXBwbGVCaW5hcnlDb2RlYyBmcm9tICdyaXBwbGUtYmluYXJ5LWNvZGVjJztcbmltcG9ydCAqIGFzIHJpcHBsZUtleXBhaXJzIGZyb20gJ3JpcHBsZS1rZXlwYWlycyc7XG5pbXBvcnQgKiBhcyB4cnBsIGZyb20gJ3hycGwnO1xuXG5pbXBvcnQge1xuICBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zLFxuICBGZWVJbmZvLFxuICBIYWxmU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFJlY292ZXJ5SW5mbyxcbiAgUmVjb3ZlcnlPcHRpb25zLFxuICBSZWNvdmVyeVRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBYcnBLZXlQYWlyIH0gZnJvbSAnLi9saWIva2V5UGFpcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHJpcHBsZSBmcm9tICcuL3JpcHBsZSc7XG5pbXBvcnQgeyBUb2tlblRyYW5zZmVyQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9saWInO1xuXG5leHBvcnQgY2xhc3MgWHJwIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBYcnAoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3IgYmV0d2VlbiB0aGUgY29pbidzIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICovXG4gIHB1YmxpYyBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGUgYmxvY2tjaGFpbiB3aGljaCBzdXBwb3J0cyB0aGlzIGNvaW5cbiAgICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBjb2luIGZhbWlseVxuICAgKi9cbiAgcHVibGljIGdldEZhbWlseSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIGNvaW5cbiAgICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgd2hldGhlciBhbiBhZGRyZXNzIHN0cmluZyBpcyB2YWxpZCBmb3IgdGhpcyBjb2luXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgcHVibGljIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmZWUgaW5mbyBmcm9tIHNlcnZlclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEZlZUluZm8oKTogUHJvbWlzZTxGZWVJbmZvPiB7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvcHVibGljL2ZlZWluZm8nKSkucmVzdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gdHhQcmVidWlsZFxuICAgKiAtIHBydlxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxIYWxmU2lnbmVkVHJhbnNhY3Rpb24+XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHtcbiAgICB0eFByZWJ1aWxkLFxuICAgIHBydixcbiAgICBpc0xhc3RTaWduYXR1cmUsXG4gIH06IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEhhbGZTaWduZWRUcmFuc2FjdGlvbiB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSB8fCAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpICYmICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZCBtdXN0IGJlIGFuIG9iamVjdCwgZ290IHR5cGUgJHt0eXBlb2YgdHhQcmVidWlsZH1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBydikgfHwgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBydikgJiYgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBydiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgdHlwZSAke3R5cGVvZiBwcnZ9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcHJ2IHBhcmFtZXRlciB0byBzaWduIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFByZWJ1aWxkLnR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgdHhIZXggaW4gdHhQcmVidWlsZGApO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoeyBwcnYgfSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSAoa2V5UGFpci5nZXRQcml2YXRlS2V5KCkgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCB0eCA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkodHhQcmVidWlsZC50eEhleCwgcHJpdmF0ZUtleSwge1xuICAgICAgc2lnbkFzOiBhZGRyZXNzLFxuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsbHkgdGhlIFNESyBwcm92aWRlcyB0aGUgZmlyc3Qgc2lnbmF0dXJlIGZvciBhbiBYUlAgdHgsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQgcHJvdmlkZXMgdGhlIGZpbmFsIG9uZSBhcyB3ZWxsXG4gICAgLy8gKHJlY292ZXJpZXMpXG4gICAgaWYgKGlzTGFzdFNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH07XG4gICAgfVxuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSaXBwbGUgcmVxdWlyZXMgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB3YWxsZXQgZ2VuZXJhdGlvbiB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlXG4gICAqIHRoZSByb290IHB1YmxpYyBrZXksIHdoaWNoIGlzIHRoZSBiYXNpcyBvZiB0aGUgcm9vdCBhZGRyZXNzLCB0d28gc2lnbmVkLCBhbmQgb25lIGhhbGYtc2lnbmVkIGluaXRpYWxpemF0aW9uIHR4c1xuICAgKiBAcGFyYW0gd2FsbGV0UGFyYW1zXG4gICAqIC0gcm9vdFByaXZhdGVLZXk6IG9wdGlvbmFsIGhleC1lbmNvZGVkIFJpcHBsZSBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnM+IHtcbiAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5KSB7XG4gICAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290UHJpdmF0ZUtleSBuZWVkcyB0byBiZSBhIGhleGFkZWNpbWFsIHByaXZhdGUga2V5IHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBpZiAoIWtleVBhaXIucHJ2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgICAgfVxuICAgICAgd2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5ID0ga2V5UGFpci5wcnY7XG4gICAgfVxuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zID0ge30pOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb247XG4gICAgbGV0IHR4SGV4OiBzdHJpbmcgPSBwYXJhbXMudHhIZXggfHwgKChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCkgYXMgc3RyaW5nKTtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gdHhIZXgnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uID0gcmlwcGxlQmluYXJ5Q29kZWMuZGVjb2RlKHR4SGV4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UodHhIZXgpO1xuICAgICAgICB0eEhleCA9IHJpcHBsZUJpbmFyeUNvZGVjLmVuY29kZSh0cmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggbmVlZHMgdG8gYmUgZWl0aGVyIGhleCBvciBKU09OIHN0cmluZyBmb3IgWFJQJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIC8vIGhhc2hlcyBpZHMgYXJlIGRpZmZlcmVudCBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCB0eFxuICAgIC8vIGZpcnN0IHdlIHRyeSB0byBnZXQgdGhlIGhhc2ggaWQgYXMgaWYgaXQgaXMgc2lnbmVkLCB3aWxsIHRocm93IGlmIGl0cyBub3RcbiAgICB0cnkge1xuICAgICAgaWQgPSB4cnBsLmhhc2hlcy5oYXNoU2lnbmVkVHgodHhIZXgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlkID0geHJwbC5oYXNoZXMuaGFzaFR4KHR4SGV4KTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25UeXBlID09PSAnQWNjb3VudFNldCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAnYWNjb3VudFNldCddLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50U2V0OiB7XG4gICAgICAgICAgbWVzc2FnZUtleTogdHJhbnNhY3Rpb24uTWVzc2FnZUtleSxcbiAgICAgICAgICBzZXRGbGFnOiB0cmFuc2FjdGlvbi5TZXRGbGFnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uVHlwZSA9PT0gJ1RydXN0U2V0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgICAnb3V0cHV0cycsXG4gICAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAgICdmZWUnLFxuICAgICAgICAgICdhY2NvdW50JyxcbiAgICAgICAgICAnbGltaXRBbW91bnQnLFxuICAgICAgICBdLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50OiB0cmFuc2FjdGlvbi5BY2NvdW50LFxuICAgICAgICBsaW1pdEFtb3VudDoge1xuICAgICAgICAgIGN1cnJlbmN5OiB0cmFuc2FjdGlvbi5MaW1pdEFtb3VudC5jdXJyZW5jeSxcbiAgICAgICAgICBpc3N1ZXI6IHRyYW5zYWN0aW9uLkxpbWl0QW1vdW50Lmlzc3VlcixcbiAgICAgICAgICB2YWx1ZTogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgdHJhbnNhY3Rpb24uRGVzdGluYXRpb24gKyAodHJhbnNhY3Rpb24uRGVzdGluYXRpb25UYWcgPj0gMCA/ICc/ZHQ9JyArIHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uVGFnIDogJycpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ10sXG4gICAgICBpZDogaWQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIG91dHB1dEFtb3VudDogdHJhbnNhY3Rpb24uQW1vdW50LFxuICAgICAgY2hhbmdlQW1vdW50OiAwLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IHRyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiB0cmFuc2FjdGlvbi5GZWUsXG4gICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiBAcGFyYW0gdHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gdHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSB3YWxsZXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9OiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkgYXMgWHJwQ29pbjtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gWy4uLmV4cGxhbmF0aW9uLm91dHB1dHMsIC4uLmV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNdWzBdO1xuICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gdHhQYXJhbXMucmVjaXBpZW50cyAmJiB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuXG4gICAgY29uc3QgY29tcGFyYXRvciA9IChyZWNpcGllbnQxLCByZWNpcGllbnQyKSA9PiB7XG4gICAgICBpZiAocmVjaXBpZW50MS5hZGRyZXNzICE9PSByZWNpcGllbnQyLmFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgYW1vdW50MSA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50MS5hbW91bnQpO1xuICAgICAgY29uc3QgYW1vdW50MiA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50Mi5hbW91bnQpO1xuICAgICAgcmV0dXJuIGFtb3VudDEudG9GaXhlZCgpID09PSBhbW91bnQyLnRvRml4ZWQoKTtcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgKHR4UGFyYW1zLnR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eFBhcmFtcy50eXBlID09PSAncGF5bWVudCcpICYmXG4gICAgICB0eXBlb2Ygb3V0cHV0LmFtb3VudCAhPT0gJ29iamVjdCcgJiZcbiAgICAgICFjb21wYXJhdG9yKG91dHB1dCwgZXhwZWN0ZWRPdXRwdXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGlmICh0eFBhcmFtcy50eXBlID09PSAnZW5hYmxldG9rZW4nKSB7XG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IHR4UGFyYW1zLnJlY2lwaWVudHNbMF07XG4gICAgICBpZiAoIXJlY2lwaWVudC50b2tlbk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNpcGllbnQgbXVzdCBpbmNsdWRlIGEgdG9rZW4gbmFtZS4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2lwaWVudEN1cnJlbmN5ID0gdXRpbHMuZ2V0WHJwQ3VycmVuY3lGcm9tVG9rZW5OYW1lKHJlY2lwaWVudC50b2tlbk5hbWUpLmN1cnJlbmN5O1xuICAgICAgaWYgKGNvaW5Db25maWcuaXNUb2tlbikge1xuICAgICAgICBpZiAocmVjaXBpZW50Q3VycmVuY3kgIT09IGNvaW5Db25maWcuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdG9rZW4gbmFtZSBzcGVjaWZpZWQgaW4gcmVjaXBpZW50cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoISgnYWNjb3VudCcgaW4gZXhwbGFuYXRpb24pIHx8ICEoJ2xpbWl0QW1vdW50JyBpbiBleHBsYW5hdGlvbikgfHwgIWV4cGxhbmF0aW9uLmxpbWl0QW1vdW50LmN1cnJlbmN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwbGFuYXRpb24gaXMgbWlzc2luZyByZXF1aXJlZCBrZXlzIChhY2NvdW50IG9yIGxpbWl0QW1vdW50IHdpdGggY3VycmVuY3kpJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlQWRkcmVzcyA9IGV4cGxhbmF0aW9uLmFjY291bnQ7XG4gICAgICBjb25zdCBjdXJyZW5jeSA9IGV4cGxhbmF0aW9uLmxpbWl0QW1vdW50LmN1cnJlbmN5O1xuXG4gICAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgIT09IGJhc2VBZGRyZXNzIHx8IHJlY2lwaWVudEN1cnJlbmN5ICE9PSBjdXJyZW5jeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgYSB2YWxpZCBYUlAgYWRkcmVzcywgYW5kIHRoZW4gbWFrZSBzdXJlIHRoZSByb290IGFkZHJlc3NlcyBtYXRjaC5cbiAgICogVGhpcyBwcmV2ZW50cyBhdHRhY2tzIHdoZXJlIGFuIGF0dGFjayBtYXkgc3dpdGNoIG91dCB0aGUgbmV3IGFkZHJlc3MgZm9yIG9uZSBvZiB0aGVpciBvd25cbiAgICogQHBhcmFtIGFkZHJlc3Mge1N0cmluZ30gdGhlIGFkZHJlc3MgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSByb290QWRkcmVzcyB7U3RyaW5nfSB0aGUgd2FsbGV0J3Mgcm9vdCBhZGRyZXNzXG4gICAqIEByZXR1cm4gdHJ1ZSBpZmYgYWRkcmVzcyBpcyBhIHdhbGxldCBhZGRyZXNzIChiYXNlZCBvbiByb290QWRkcmVzcylcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCByb290QWRkcmVzcyB9OiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmVyaWZpY2F0aW9uIGZhaWx1cmU6IGFkZHJlc3MgXCIke2FkZHJlc3N9XCIgaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudEluZm9QYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2luZm8nLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiBhZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ2N1cnJlbnQnLFxuICAgICAgICAgIHF1ZXVlOiB0cnVlLFxuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBzaWduZXJfbGlzdHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50SW5mbyA9IChhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5nZXRSaXBwbGVkVXJsKCkpLnNlbmQoYWNjb3VudEluZm9QYXJhbXMpKS5ib2R5O1xuXG4gICAgaWYgKGFjY291bnRJbmZvPy5yZXN1bHQ/LmFjY291bnRfZGF0YT8uRmxhZ3MgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFjY291bnQgaW5mb3JtYXRpb246IEZsYWdzIGZpZWxkIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3MgPSB4cnBsLnBhcnNlQWNjb3VudFJvb3RGbGFncyhhY2NvdW50SW5mby5yZXN1bHQuYWNjb3VudF9kYXRhLkZsYWdzKTtcblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuXG4gICAgaWYgKGZsYWdzLmxzZlJlcXVpcmVEZXN0VGFnICYmIGFkZHJlc3NEZXRhaWxzLmRlc3RpbmF0aW9uVGFnID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBJbnZhbGlkIEFkZHJlc3M6IERlc3RpbmF0aW9uIFRhZyBpcyByZXF1aXJlZCBmb3IgYWRkcmVzcyBcIiR7YWRkcmVzc31cIi5gKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkcmVzc0RldGFpbHMuYWRkcmVzcyAhPT0gcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6ICR7YWRkcmVzc0RldGFpbHMuYWRkcmVzc30gdnMuICR7cm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVUkwgb2YgYSB3ZWxsLWtub3duLCBwdWJsaWMgZmFjaW5nIChub24tYml0Z28pIHJpcHBsZWQgaW5zdGFuY2Ugd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJlY292ZXJ5XG4gICAqL1xuICBwdWJsaWMgZ2V0UmlwcGxlZFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnaHR0cHM6Ly9zMS5yaXBwbGUuY29tOjUxMjM0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogLSByb290QWRkcmVzczogcm9vdCBYUlAgd2FsbGV0IGFkZHJlc3MgdG8gcmVjb3ZlciBmdW5kcyBmcm9tXG4gICAqIC0gdXNlcktleTogW2VuY3J5cHRlZF0geHBydlxuICAgKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gICAqIC0gd2FsbGV0UGFzc3BocmFzZTogbmVjZXNzYXJ5IGlmIG9uZSBvZiB0aGUgeHBydnMgaXMgZW5jcnlwdGVkXG4gICAqIC0gYml0Z29LZXk6IHhwdWJcbiAgICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAgICogLSByZWNvdmVyeURlc3RpbmF0aW9uOiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJ5SW5mbyB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCByaXBwbGVkVXJsID0gdGhpcy5nZXRSaXBwbGVkVXJsKCk7XG4gICAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgneHB1YicpICYmICFwYXJhbXMudXNlcktleS5zdGFydHNXaXRoKCd4cHViJyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gcGFyYW1zLmJhY2t1cEtleS5zdGFydHNXaXRoKCd4cHViJykgJiYgcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgneHB1YicpO1xuXG4gICAgY29uc3QgYWNjb3VudEluZm9QYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2luZm8nLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiBwYXJhbXMucm9vdEFkZHJlc3MsXG4gICAgICAgICAgbGVkZ2VyX2luZGV4OiAnY3VycmVudCcsXG4gICAgICAgICAgcXVldWU6IHRydWUsXG4gICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgIHNpZ25lcl9saXN0czogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IGFjY291bnRMaW5lc1BhcmFtcyA9IHtcbiAgICAgIG1ldGhvZDogJ2FjY291bnRfbGluZXMnLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiBwYXJhbXMucm9vdEFkZHJlc3MsXG4gICAgICAgICAgbGVkZ2VyX2luZGV4OiAndmFsaWRhdGVkJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICBjaGVja0tyc1Byb3ZpZGVyKHRoaXMsIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyEnKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gZ2V0QmlwMzJLZXlzKHRoaXMuYml0Z28sIHBhcmFtcywgeyByZXF1aXJlQml0R29YcHViOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHsgYWRkcmVzc0RldGFpbHMsIGZlZURldGFpbHMsIHNlcnZlckRldGFpbHMsIGFjY291bnRMaW5lcyB9ID0gYXdhaXQgcHJvbWlzZVByb3BzKHtcbiAgICAgIGFkZHJlc3NEZXRhaWxzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZChhY2NvdW50SW5mb1BhcmFtcyksXG4gICAgICBmZWVEZXRhaWxzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZCh7IG1ldGhvZDogJ2ZlZScgfSksXG4gICAgICBzZXJ2ZXJEZXRhaWxzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZCh7IG1ldGhvZDogJ3NlcnZlcl9pbmZvJyB9KSxcbiAgICAgIGFjY291bnRMaW5lczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoYWNjb3VudExpbmVzUGFyYW1zKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wZW5MZWRnZXJGZWUgPSBuZXcgQmlnTnVtYmVyKGZlZURldGFpbHMuYm9keS5yZXN1bHQuZHJvcHMub3Blbl9sZWRnZXJfZmVlKTtcbiAgICBjb25zdCBiYXNlUmVzZXJ2ZSA9IG5ldyBCaWdOdW1iZXIoc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIucmVzZXJ2ZV9iYXNlX3hycCkudGltZXMoXG4gICAgICB0aGlzLmdldEJhc2VGYWN0b3IoKVxuICAgICk7XG4gICAgY29uc3QgcmVzZXJ2ZURlbHRhID0gbmV3IEJpZ051bWJlcihzZXJ2ZXJEZXRhaWxzLmJvZHkucmVzdWx0LmluZm8udmFsaWRhdGVkX2xlZGdlci5yZXNlcnZlX2luY194cnApLnRpbWVzKFxuICAgICAgdGhpcy5nZXRCYXNlRmFjdG9yKClcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRMZWRnZXIgPSBzZXJ2ZXJEZXRhaWxzLmJvZHkucmVzdWx0LmluZm8udmFsaWRhdGVkX2xlZGdlci5zZXE7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IGFkZHJlc3NEZXRhaWxzLmJvZHkucmVzdWx0LmFjY291bnRfZGF0YS5TZXF1ZW5jZTtcbiAgICBjb25zdCBiYWxhbmNlID0gbmV3IEJpZ051bWJlcihhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuQmFsYW5jZSk7XG4gICAgY29uc3Qgc2lnbmVyTGlzdHMgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuc2lnbmVyX2xpc3RzO1xuICAgIGNvbnN0IGFjY291bnRGbGFncyA9IGFkZHJlc3NEZXRhaWxzLmJvZHkucmVzdWx0LmFjY291bnRfZGF0YS5GbGFncztcbiAgICBjb25zdCBvd25lckNvdW50ID0gbmV3IEJpZ051bWJlcihhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuT3duZXJDb3VudCk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgc2lnbmVyIGxpc3Qgc2V0XG4gICAgaWYgKHNpZ25lckxpc3RzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNldCBvZiBzaWduZXIgbGlzdHMnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHNpZ25lcnMgYXJlIHVzZXIsIGJhY2t1cCwgYml0Z29cbiAgICBjb25zdCB1c2VyQWRkcmVzcyA9IHJpcHBsZUtleXBhaXJzLmRlcml2ZUFkZHJlc3Moa2V5c1swXS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBjb25zdCBiYWNrdXBBZGRyZXNzID0gcmlwcGxlS2V5cGFpcnMuZGVyaXZlQWRkcmVzcyhrZXlzWzFdLnB1YmxpY0tleS50b1N0cmluZygnaGV4JykpO1xuXG4gICAgY29uc3Qgc2lnbmVyTGlzdCA9IHNpZ25lckxpc3RzWzBdO1xuICAgIGlmIChzaWduZXJMaXN0LlNpZ25lclF1b3J1bSAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1pbmltdW0gc2lnbmF0dXJlIGNvdW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kQWRkcmVzc2VzID0ge307XG5cbiAgICBjb25zdCBzaWduZXJFbnRyaWVzID0gc2lnbmVyTGlzdC5TaWduZXJFbnRyaWVzO1xuICAgIGlmIChzaWduZXJFbnRyaWVzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25lciBsaXN0IGxlbmd0aCcpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgU2lnbmVyRW50cnkgfSBvZiBzaWduZXJFbnRyaWVzKSB7XG4gICAgICBjb25zdCB3ZWlnaHQgPSBTaWduZXJFbnRyeS5TaWduZXJXZWlnaHQ7XG4gICAgICBjb25zdCBhZGRyZXNzID0gU2lnbmVyRW50cnkuQWNjb3VudDtcbiAgICAgIGlmICh3ZWlnaHQgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25lciB3ZWlnaHQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgaXQncyBhIGR1cGUgb2YgYW4gYWRkcmVzcyB3ZSBhbHJlYWR5IGtub3csIGJsb2NrXG4gICAgICBpZiAoZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gPj0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2R1cGxpY2F0ZSBzaWduZXIgYWRkcmVzcycpO1xuICAgICAgfVxuICAgICAgZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gPSAoZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIGlmIChmb3VuZEFkZHJlc3Nlc1t1c2VyQWRkcmVzc10gIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBpbmNpZGVuY2UgZnJlcXVlbmN5IG9mIHVzZXIgc2lnbmVyIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKGZvdW5kQWRkcmVzc2VzW2JhY2t1cEFkZHJlc3NdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgaW5jaWRlbmNlIGZyZXF1ZW5jeSBvZiB1c2VyIHNpZ25lciBhZGRyZXNzJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBmbGFncyBkaXNhYmxlIHRoZSBtYXN0ZXIga2V5IGFuZCBlbmZvcmNlIGRlc3RpbmF0aW9uIHRhZ3NcbiAgICBjb25zdCBVU0VSX0tFWV9TRVRUSU5HX0ZMQUcgPSA2NTUzNjtcbiAgICBjb25zdCBNQVNURVJfS0VZX0RFQUNUSVZBVElPTl9GTEFHID0gMTA0ODU3NjtcbiAgICBjb25zdCBSRVFVSVJFX0RFU1RJTkFUSU9OX1RBR19GTEFHID0gMTMxMDcyO1xuICAgIGlmICgoYWNjb3VudEZsYWdzICYgVVNFUl9LRVlfU0VUVElOR19GTEFHKSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhIGN1c3RvbSB1c2VyIGtleSBoYXMgYmVlbiBzZXQnKTtcbiAgICB9XG4gICAgaWYgKChhY2NvdW50RmxhZ3MgJiBNQVNURVJfS0VZX0RFQUNUSVZBVElPTl9GTEFHKSAhPT0gTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgbWFzdGVyIGtleSBoYXMgbm90IGJlZW4gZGVhY3RpdmF0ZWQnKTtcbiAgICB9XG4gICAgaWYgKChhY2NvdW50RmxhZ3MgJiBSRVFVSVJFX0RFU1RJTkFUSU9OX1RBR19GTEFHKSAhPT0gUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgZGVzdGluYXRpb24gZmxhZyByZXF1aXJlbWVudCBoYXMgbm90IGJlZW4gYWN0aXZhdGVkJyk7XG4gICAgfVxuXG4gICAgLy8gcmVjb3ZlciB0aGUgZnVuZHNcbiAgICBjb25zdCB0b3RhbFJlc2VydmVEZWx0YSA9IHJlc2VydmVEZWx0YS50aW1lcyhvd25lckNvdW50KTtcbiAgICBjb25zdCByZXNlcnZlID0gYmFzZVJlc2VydmUucGx1cyh0b3RhbFJlc2VydmVEZWx0YSk7XG4gICAgY29uc3QgcmVjb3ZlcmFibGVCYWxhbmNlID0gYmFsYW5jZS5taW51cyhyZXNlcnZlKTtcblxuICAgIGNvbnN0IHJhd0Rlc3RpbmF0aW9uID0gcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25EZXRhaWxzID0gdXJsLnBhcnNlKHJhd0Rlc3RpbmF0aW9uKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMuZHQpKSB7XG4gICAgICAgIC8vIGlmIHF1ZXJ5RGV0YWlscy5kdCBpcyBhbiBhcnJheSwgdGhhdCBtZWFucyBkdCB3YXMgZ2l2ZW4gbXVsdGlwbGUgdGltZXMsIHdoaWNoIGlzIG5vdCB2YWxpZFxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihcbiAgICAgICAgICBgZGVzdGluYXRpb24gdGFnIGNhbiBhcHBlYXIgYXQgbW9zdCBvbmNlLCBidXQgJHtxdWVyeURldGFpbHMuZHQubGVuZ3RofSBkZXN0aW5hdGlvbiB0YWdzIHdlcmUgZm91bmRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJhYmxlQmFsYW5jZS50b051bWJlcigpIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFF1YW50aXR5IG9mIFhSUCB0byByZWNvdmVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIEN1cnJlbnQgYmFsYW5jZTogJHtiYWxhbmNlLnRvTnVtYmVyKCl9LCBibG9ja2NoYWluIHJlc2VydmU6ICR7cmVzZXJ2ZS50b051bWJlcigpfSwgc3BlbmRhYmxlIGJhbGFuY2U6ICR7cmVjb3ZlcmFibGVCYWxhbmNlLnRvTnVtYmVyKCl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc3N1ZXIgPSBwYXJhbXM/Lmlzc3VlckFkZHJlc3M7XG4gICAgY29uc3QgY3VycmVuY3kgPSBwYXJhbXM/LmN1cnJlbmN5Q29kZTtcbiAgICBpZiAoISFpc3N1ZXIgJiYgISFjdXJyZW5jeSkge1xuICAgICAgY29uc3QgdG9rZW5QYXJhbXMgPSB7XG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICByZWNvdmVyYWJsZUJhbGFuY2UsXG4gICAgICAgIGN1cnJlbnRMZWRnZXIsXG4gICAgICAgIG9wZW5MZWRnZXJGZWUsXG4gICAgICAgIHNlcXVlbmNlSWQsXG4gICAgICAgIGFjY291bnRMaW5lcyxcbiAgICAgICAga2V5cyxcbiAgICAgICAgaXNLcnNSZWNvdmVyeSxcbiAgICAgICAgaXNVbnNpZ25lZFN3ZWVwLFxuICAgICAgICB1c2VyQWRkcmVzcyxcbiAgICAgICAgYmFja3VwQWRkcmVzcyxcbiAgICAgICAgaXNzdWVyLFxuICAgICAgICBjdXJyZW5jeSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJlY292ZXJYcnBUb2tlbihwYXJhbXMsIHRva2VuUGFyYW1zKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkgYXMgVHJhbnNmZXJCdWlsZGVyO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnRvKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIGFzIHN0cmluZylcbiAgICAgIC5hbW91bnQocmVjb3ZlcmFibGVCYWxhbmNlLnRvRml4ZWQoMCkpXG4gICAgICAuc2VuZGVyKHBhcmFtcy5yb290QWRkcmVzcylcbiAgICAgIC5mbGFncygyMTQ3NDgzNjQ4KVxuICAgICAgLmxhc3RMZWRnZXJTZXF1ZW5jZShjdXJyZW50TGVkZ2VyICsgMTAwMDAwMCkgLy8gZ2l2ZSBpdCAxIG1pbGxpb24gbGVkZ2VycycgdGltZSAofjEgbW9udGgsIHN1aXRhYmxlIGZvciBLUlMpXG4gICAgICAuZmVlKG9wZW5MZWRnZXJGZWUudGltZXMoMykudG9GaXhlZCgwKSkgLy8gdGhlIGZhY3RvciB0aHJlZSBpcyBmb3IgdGhlIG11bHRpc2lnbmluZ1xuICAgICAgLnNlcXVlbmNlKHNlcXVlbmNlSWQpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJLZXkgPSBrZXlzWzBdLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHNlcmlhbGl6ZWRUeCwgdXNlcktleSwgeyBzaWduQXM6IHVzZXJBZGRyZXNzIH0pO1xuXG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBzdHJpbmc7XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSB1c2VyU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWtleXNbMV0ucHJpdmF0ZUtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhY2t1cEtleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFja3VwS2V5ID0ga2V5c1sxXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJhY2t1cFNpZ25hdHVyZSA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkoc2VyaWFsaXplZFR4LCBiYWNrdXBLZXksIHsgc2lnbkFzOiBiYWNrdXBBZGRyZXNzIH0pO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSByaXBwbGUubXVsdGlzaWduKFt1c2VyU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uLCBiYWNrdXBTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb25dKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIH0pKSBhcyBSZWNvdmVyeUluZm87XG5cbiAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLnR4SGV4ID0gc2lnbmVkVHJhbnNhY3Rpb247XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5iYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5O1xuICAgICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5jb2luID0gdGhpcy5nZXRDaGFpbigpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyWHJwVG9rZW4ocGFyYW1zLCB0b2tlblBhcmFtcykge1xuICAgIGNvbnN0IHsgY3VycmVuY3ksIGlzc3VlciB9ID0gdG9rZW5QYXJhbXM7XG4gICAgY29uc3QgdG9rZW5OYW1lID0gKHV0aWxzLmdldFhycFRva2VuKGlzc3VlciwgY3VycmVuY3kpIGFzIFhycENvaW4pLm5hbWU7XG4gICAgY29uc3QgbGluZXMgPSB0b2tlblBhcmFtcy5hY2NvdW50TGluZXMuYm9keS5yZXN1bHQubGluZXM7XG5cbiAgICBsZXQgYW1vdW50O1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgaWYgKGxpbmUuY3VycmVuY3kgPT09IGN1cnJlbmN5ICYmIGxpbmUuYWNjb3VudCA9PT0gaXNzdWVyKSB7XG4gICAgICAgIGFtb3VudCA9IGxpbmUuYmFsYW5jZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERvZXMgbm90IGhhdmUgVHJ1c3RsaW5lIHdpdGggJHtpc3N1ZXJ9YCk7XG4gICAgfVxuICAgIGlmIChhbW91bnQgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb2VzIG5vdCBoYXZlIGZ1bmRzIHRvIHJlY292ZXJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNpbWFsUGxhY2VzID0gY29pbnMuZ2V0KHRva2VuTmFtZSkuZGVjaW1hbFBsYWNlcztcbiAgICBhbW91bnQgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCkuc2hpZnRlZEJ5KGRlY2ltYWxQbGFjZXMpLnRvRml4ZWQoKTtcblxuICAgIGNvbnN0IEZMQUdfVkFMVUUgPSAyMTQ3NDgzNjQ4O1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0b2tlbk5hbWUpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCkgYXMgVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudG8odG9rZW5QYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbilcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnNlbmRlcihwYXJhbXMucm9vdEFkZHJlc3MpXG4gICAgICAuZmxhZ3MoRkxBR19WQUxVRSlcbiAgICAgIC5sYXN0TGVkZ2VyU2VxdWVuY2UodG9rZW5QYXJhbXMuY3VycmVudExlZGdlciArIDEwMDAwMDApIC8vIGdpdmUgaXQgMSBtaWxsaW9uIGxlZGdlcnMnIHRpbWUgKH4xIG1vbnRoLCBzdWl0YWJsZSBmb3IgS1JTKVxuICAgICAgLmZlZSh0b2tlblBhcmFtcy5vcGVuTGVkZ2VyRmVlLnRpbWVzKDMpLnRvRml4ZWQoMCkpIC8vIHRoZSBmYWN0b3IgdGhyZWUgaXMgZm9yIHRoZSBtdWx0aXNpZ25pbmdcbiAgICAgIC5zZXF1ZW5jZSh0b2tlblBhcmFtcy5zZXF1ZW5jZUlkKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGNvbnN0IHsga2V5cywgaXNLcnNSZWNvdmVyeSwgaXNVbnNpZ25lZFN3ZWVwLCB1c2VyQWRkcmVzcywgYmFja3VwQWRkcmVzcyB9ID0gdG9rZW5QYXJhbXM7XG5cbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4LFxuICAgICAgICBjb2luOiB0aGlzLmdldENoYWluKCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgha2V5c1swXS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXJLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyS2V5ID0ga2V5c1swXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleShzZXJpYWxpemVkVHgsIHVzZXJLZXksIHsgc2lnbkFzOiB1c2VyQWRkcmVzcyB9KTtcblxuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IGtleXNbMV0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBiYWNrdXBTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHNlcmlhbGl6ZWRUeCwgYmFja3VwS2V5LCB7IHNpZ25BczogYmFja3VwQWRkcmVzcyB9KTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gcmlwcGxlLm11bHRpc2lnbihbdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbiwgYmFja3VwU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuXG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHNpZ25lZFRyYW5zYWN0aW9uO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFhycEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IFhycEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICBpZiAoIWtleXMueHBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy54cHViLFxuICAgICAgcHJ2OiBrZXlzLnhwcnYsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiJdfQ==
649
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILCtDQUF5QztBQUN6QywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLHlDQUEyQjtBQUUzQixtREFhOEI7QUFDOUIsaURBQWtGO0FBQ2xGLHVFQUF5RDtBQUN6RCxnRUFBa0Q7QUFDbEQsMkNBQTZCO0FBYzdCLDJDQUFzRDtBQUN0RCx3REFBZ0M7QUFDaEMsc0RBQThCO0FBQzlCLCtCQUF5RjtBQUV6RixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsT0FBZTtRQUNuQyxPQUFPLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSx3QkFBd0I7UUFDN0IsT0FBTztZQUNMLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsZ0NBQWdDLEVBQUUsS0FBSztTQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFDM0IsVUFBVSxFQUNWLEdBQUcsRUFDSCxlQUFlLEdBQ1E7UUFDdkIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxPQUFPLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDakYsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkUsTUFBTSxFQUFFLEdBQUcsZ0JBQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUNqRSxNQUFNLEVBQUUsT0FBTztTQUNoQixDQUFDLENBQUM7UUFFSCxrSEFBa0g7UUFDbEgsZUFBZTtRQUNmLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FDNUIsWUFBNkM7UUFFN0MsSUFBSSxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDaEMsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELFlBQVksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxTQUFvQyxFQUFFO1FBQzdELElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksS0FBSyxHQUFXLE1BQU0sQ0FBQyxLQUFLLElBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFZLENBQUM7UUFDL0YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDO2dCQUNILFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksRUFBVSxDQUFDO1FBQ2Ysc0RBQXNEO1FBQ3RELDRFQUE0RTtRQUM1RSxJQUFJLENBQUM7WUFDSCxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksV0FBVyxDQUFDLGVBQWUsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNqRCxPQUFPO2dCQUNMLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQztnQkFDckcsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRSxDQUFDO2dCQUNmLFlBQVksRUFBRSxDQUFDO2dCQUNmLE9BQU8sRUFBRSxFQUFFO2dCQUNYLEdBQUcsRUFBRTtvQkFDSCxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUc7b0JBQ3BCLE9BQU8sRUFBRSxTQUFTO29CQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2lCQUN2QjtnQkFDRCxVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVO29CQUNsQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87aUJBQzdCO2FBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLFdBQVcsQ0FBQyxlQUFlLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEQsT0FBTztnQkFDTCxZQUFZLEVBQUU7b0JBQ1osSUFBSTtvQkFDSixjQUFjO29CQUNkLGNBQWM7b0JBQ2QsU0FBUztvQkFDVCxlQUFlO29CQUNmLEtBQUs7b0JBQ0wsU0FBUztvQkFDVCxhQUFhO2lCQUNkO2dCQUNELEVBQUUsRUFBRSxFQUFFO2dCQUNOLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUUsQ0FBQztnQkFDZixZQUFZLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsRUFBRTtnQkFDWCxHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHO29CQUNwQixPQUFPLEVBQUUsU0FBUztvQkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztpQkFDdkI7Z0JBQ0QsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO2dCQUM1QixXQUFXLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUTtvQkFDMUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTTtvQkFDdEMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSztpQkFDckM7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUNYLFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLE9BQU87WUFDTCxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQztZQUN2RixFQUFFLEVBQUUsRUFBRTtZQUNOLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFlBQVksRUFBRSxXQUFXLENBQUMsTUFBTTtZQUNoQyxZQUFZLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxPQUFPO29CQUNQLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtpQkFDM0I7YUFDRjtZQUNELEdBQUcsRUFBRTtnQkFDSCxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQ3BCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2FBQ3ZCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUE0QjtRQUMvRSxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBWSxDQUFDO1FBQ3pELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ2hELEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztTQUN4QixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFFRixJQUNFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7WUFDNUQsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVE7WUFDakMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUNuQyxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDcEMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsb0lBQW9JLENBQ3ZKLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE1BQU0saUJBQWlCLEdBQUcsZUFBSyxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUYsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksaUJBQWlCLEtBQUssVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4RyxNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7WUFDakcsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDeEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFFbEQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxpQkFBaUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQXdCO1FBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLDhCQUFtQixDQUFDLDBDQUEwQyxPQUFPLGdCQUFnQixDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsTUFBTSxFQUFFLGNBQWM7WUFDdEIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLE9BQU8sRUFBRSxPQUFPO29CQUNoQixZQUFZLEVBQUUsU0FBUztvQkFDdkIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsTUFBTSxFQUFFLElBQUk7b0JBQ1osWUFBWSxFQUFFLElBQUk7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRS9GLElBQUksV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhGLE1BQU0sY0FBYyxHQUFHLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxNQUFNLGtCQUFrQixHQUFHLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxjQUFjLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JFLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQyw2REFBNkQsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsT0FBTyxLQUFLLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxpQ0FBc0IsQ0FDOUIsK0JBQStCLGNBQWMsQ0FBQyxPQUFPLFFBQVEsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQzFGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sNkJBQTZCLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXVCO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpHLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsTUFBTSxFQUFFLGNBQWM7WUFDdEIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVztvQkFDM0IsWUFBWSxFQUFFLFNBQVM7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJO29CQUNYLE1BQU0sRUFBRSxJQUFJO29CQUNaLFlBQVksRUFBRSxJQUFJO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sa0JBQWtCLEdBQUc7WUFDekIsTUFBTSxFQUFFLGVBQWU7WUFDdkIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVztvQkFDM0IsWUFBWSxFQUFFLFdBQVc7aUJBQzFCO2FBQ0Y7U0FDRixDQUFDO1FBRUYsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFBLDJCQUFnQixFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBWSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUzRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxJQUFBLHVCQUFZLEVBQUM7WUFDckYsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNuRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9ELGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDMUUsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sV0FBVyxHQUFHLElBQUksd0JBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQ3ZHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDckIsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksd0JBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxDQUN2RyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQ3JCLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQ3pFLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyRiw4Q0FBOEM7UUFDOUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFdEYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUUxQixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQy9DLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELEtBQUssTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDeEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUNwQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFFRCxzREFBc0Q7WUFDdEQsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNwQyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztRQUM3QyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLDRCQUE0QixDQUFDLEtBQUssNEJBQTRCLEVBQUUsQ0FBQztZQUNuRixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsNEJBQTRCLENBQUMsS0FBSyw0QkFBNEIsRUFBRSxDQUFDO1lBQ25GLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUNsRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFckQsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsNkZBQTZGO2dCQUM3RixNQUFNLElBQUksOEJBQW1CLENBQzNCLGdEQUFnRCxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sOEJBQThCLENBQ3JHLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsT0FBTyxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsT0FBTyxDQUFDLFFBQVEsRUFBRSx3QkFBd0Isa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDNUwsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsYUFBYSxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLFdBQVcsR0FBRztnQkFDbEIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjtnQkFDL0Msa0JBQWtCO2dCQUNsQixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixZQUFZO2dCQUNaLElBQUk7Z0JBQ0osYUFBYTtnQkFDYixlQUFlO2dCQUNmLFdBQVc7Z0JBQ1gsYUFBYTtnQkFDYixNQUFNO2dCQUNOLFFBQVE7YUFDVCxDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFxQixDQUFDO1FBQ2xFLFNBQVM7YUFDTixFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUE2QixDQUFDO2FBQ3hDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNqQixrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsK0RBQStEO2FBQzNHLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJDQUEyQzthQUNsRixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEIsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFNUMsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPO2dCQUNMLEtBQUssRUFBRSxZQUFZO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTthQUN0QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLGFBQWEsR0FBRyxnQkFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVoRyxJQUFJLGlCQUF5QixDQUFDO1FBRTlCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxNQUFNLGVBQWUsR0FBRyxnQkFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN0RyxpQkFBaUIsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQzdHLENBQUM7UUFFRCxNQUFNLHNCQUFzQixHQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzFFLEtBQUssRUFBRSxpQkFBaUI7U0FDekIsQ0FBQyxDQUFpQixDQUFDO1FBRXBCLHNCQUFzQixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQztRQUVqRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BELHNCQUFzQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFdBQVc7UUFDOUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUksZUFBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFFekQsSUFBSSxNQUFNLENBQUM7UUFDWCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDekQsTUFBTSxHQUFHLElBQUksd0JBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbEUsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTlCLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBMEIsQ0FBQztRQUM1RSxTQUFTO2FBQ04sRUFBRSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQzthQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNqQixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLCtEQUErRDthQUN2SCxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO2FBQzlGLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFNUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFFekYsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPO2dCQUNMLEtBQUssRUFBRSxZQUFZO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTthQUN0QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLGFBQWEsR0FBRyxnQkFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVoRyxJQUFJLGlCQUF5QixDQUFDO1FBRTlCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxNQUFNLGVBQWUsR0FBRyxnQkFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN0RyxpQkFBaUIsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQzdHLENBQUM7UUFFRCxNQUFNLHNCQUFzQixHQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzFFLEtBQUssRUFBRSxpQkFBaUI7U0FDekIsQ0FBQyxDQUFpQixDQUFDO1FBRXBCLHNCQUFzQixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQztRQUVqRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BELHNCQUFzQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxJQUFhO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBVSxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUErQjtRQUNwRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRjtBQWpyQkQsa0JBaXJCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpZ051bWJlciB9IGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgY2hlY2tLcnNQcm92aWRlcixcbiAgZ2V0QmlwMzJLZXlzLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBLZXlQYWlyLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIHByb21pc2VQcm9wcyxcbiAgVG9rZW5FbmFibGVtZW50Q29uZmlnLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMsIFhycENvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHJpcHBsZUJpbmFyeUNvZGVjIGZyb20gJ3JpcHBsZS1iaW5hcnktY29kZWMnO1xuaW1wb3J0ICogYXMgcmlwcGxlS2V5cGFpcnMgZnJvbSAncmlwcGxlLWtleXBhaXJzJztcbmltcG9ydCAqIGFzIHhycGwgZnJvbSAneHJwbCc7XG5cbmltcG9ydCB7XG4gIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEZlZUluZm8sXG4gIEhhbGZTaWduZWRUcmFuc2FjdGlvbixcbiAgUmVjb3ZlcnlJbmZvLFxuICBSZWNvdmVyeU9wdGlvbnMsXG4gIFJlY292ZXJ5VHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zLFxufSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIGFzIFhycEtleVBhaXIgfSBmcm9tICcuL2xpYi9rZXlQYWlyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgcmlwcGxlIGZyb20gJy4vcmlwcGxlJztcbmltcG9ydCB7IFRva2VuVHJhbnNmZXJCdWlsZGVyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5cbmV4cG9ydCBjbGFzcyBYcnAgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFhycChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvciBiZXR3ZWVuIHRoZSBjb2luJ3MgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKi9cbiAgcHVibGljIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBibG9ja2NoYWluIHdoaWNoIHN1cHBvcnRzIHRoaXMgY29pblxuICAgKi9cbiAgcHVibGljIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGNvaW4gZmFtaWx5XG4gICAqL1xuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgY29pblxuICAgKi9cbiAgcHVibGljIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGFuIGFkZHJlc3Mgc3RyaW5nIGlzIHZhbGlkIGZvciB0aGlzIGNvaW5cbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBwdWJsaWMgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZlZSBpbmZvIGZyb20gc2VydmVyXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmVlSW5mbygpOiBQcm9taXNlPEZlZUluZm8+IHtcbiAgICByZXR1cm4gdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy9wdWJsaWMvZmVlaW5mbycpKS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gdHhQcmVidWlsZFxuICAgKiAtIHBydlxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxIYWxmU2lnbmVkVHJhbnNhY3Rpb24+XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHtcbiAgICB0eFByZWJ1aWxkLFxuICAgIHBydixcbiAgICBpc0xhc3RTaWduYXR1cmUsXG4gIH06IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEhhbGZTaWduZWRUcmFuc2FjdGlvbiB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSB8fCAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpICYmICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZCBtdXN0IGJlIGFuIG9iamVjdCwgZ290IHR5cGUgJHt0eXBlb2YgdHhQcmVidWlsZH1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBydikgfHwgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBydikgJiYgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBydiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgdHlwZSAke3R5cGVvZiBwcnZ9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcHJ2IHBhcmFtZXRlciB0byBzaWduIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFByZWJ1aWxkLnR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgdHhIZXggaW4gdHhQcmVidWlsZGApO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoeyBwcnYgfSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSAoa2V5UGFpci5nZXRQcml2YXRlS2V5KCkgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCB0eCA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkodHhQcmVidWlsZC50eEhleCwgcHJpdmF0ZUtleSwge1xuICAgICAgc2lnbkFzOiBhZGRyZXNzLFxuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsbHkgdGhlIFNESyBwcm92aWRlcyB0aGUgZmlyc3Qgc2lnbmF0dXJlIGZvciBhbiBYUlAgdHgsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQgcHJvdmlkZXMgdGhlIGZpbmFsIG9uZSBhcyB3ZWxsXG4gICAgLy8gKHJlY292ZXJpZXMpXG4gICAgaWYgKGlzTGFzdFNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH07XG4gICAgfVxuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSaXBwbGUgcmVxdWlyZXMgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB3YWxsZXQgZ2VuZXJhdGlvbiB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlXG4gICAqIHRoZSByb290IHB1YmxpYyBrZXksIHdoaWNoIGlzIHRoZSBiYXNpcyBvZiB0aGUgcm9vdCBhZGRyZXNzLCB0d28gc2lnbmVkLCBhbmQgb25lIGhhbGYtc2lnbmVkIGluaXRpYWxpemF0aW9uIHR4c1xuICAgKiBAcGFyYW0gd2FsbGV0UGFyYW1zXG4gICAqIC0gcm9vdFByaXZhdGVLZXk6IG9wdGlvbmFsIGhleC1lbmNvZGVkIFJpcHBsZSBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnM+IHtcbiAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5KSB7XG4gICAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290UHJpdmF0ZUtleSBuZWVkcyB0byBiZSBhIGhleGFkZWNpbWFsIHByaXZhdGUga2V5IHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBpZiAoIWtleVBhaXIucHJ2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgICAgfVxuICAgICAgd2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5ID0ga2V5UGFpci5wcnY7XG4gICAgfVxuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zID0ge30pOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb247XG4gICAgbGV0IHR4SGV4OiBzdHJpbmcgPSBwYXJhbXMudHhIZXggfHwgKChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCkgYXMgc3RyaW5nKTtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gdHhIZXgnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uID0gcmlwcGxlQmluYXJ5Q29kZWMuZGVjb2RlKHR4SGV4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UodHhIZXgpO1xuICAgICAgICB0eEhleCA9IHJpcHBsZUJpbmFyeUNvZGVjLmVuY29kZSh0cmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggbmVlZHMgdG8gYmUgZWl0aGVyIGhleCBvciBKU09OIHN0cmluZyBmb3IgWFJQJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIC8vIGhhc2hlcyBpZHMgYXJlIGRpZmZlcmVudCBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCB0eFxuICAgIC8vIGZpcnN0IHdlIHRyeSB0byBnZXQgdGhlIGhhc2ggaWQgYXMgaWYgaXQgaXMgc2lnbmVkLCB3aWxsIHRocm93IGlmIGl0cyBub3RcbiAgICB0cnkge1xuICAgICAgaWQgPSB4cnBsLmhhc2hlcy5oYXNoU2lnbmVkVHgodHhIZXgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlkID0geHJwbC5oYXNoZXMuaGFzaFR4KHR4SGV4KTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25UeXBlID09PSAnQWNjb3VudFNldCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAnYWNjb3VudFNldCddLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50U2V0OiB7XG4gICAgICAgICAgbWVzc2FnZUtleTogdHJhbnNhY3Rpb24uTWVzc2FnZUtleSxcbiAgICAgICAgICBzZXRGbGFnOiB0cmFuc2FjdGlvbi5TZXRGbGFnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uVHlwZSA9PT0gJ1RydXN0U2V0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgICAnb3V0cHV0cycsXG4gICAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAgICdmZWUnLFxuICAgICAgICAgICdhY2NvdW50JyxcbiAgICAgICAgICAnbGltaXRBbW91bnQnLFxuICAgICAgICBdLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50OiB0cmFuc2FjdGlvbi5BY2NvdW50LFxuICAgICAgICBsaW1pdEFtb3VudDoge1xuICAgICAgICAgIGN1cnJlbmN5OiB0cmFuc2FjdGlvbi5MaW1pdEFtb3VudC5jdXJyZW5jeSxcbiAgICAgICAgICBpc3N1ZXI6IHRyYW5zYWN0aW9uLkxpbWl0QW1vdW50Lmlzc3VlcixcbiAgICAgICAgICB2YWx1ZTogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgdHJhbnNhY3Rpb24uRGVzdGluYXRpb24gKyAodHJhbnNhY3Rpb24uRGVzdGluYXRpb25UYWcgPj0gMCA/ICc/ZHQ9JyArIHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uVGFnIDogJycpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ10sXG4gICAgICBpZDogaWQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIG91dHB1dEFtb3VudDogdHJhbnNhY3Rpb24uQW1vdW50LFxuICAgICAgY2hhbmdlQW1vdW50OiAwLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IHRyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiB0cmFuc2FjdGlvbi5GZWUsXG4gICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiBAcGFyYW0gdHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gdHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSB3YWxsZXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9OiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkgYXMgWHJwQ29pbjtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gWy4uLmV4cGxhbmF0aW9uLm91dHB1dHMsIC4uLmV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNdWzBdO1xuICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gdHhQYXJhbXMucmVjaXBpZW50cyAmJiB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuXG4gICAgY29uc3QgY29tcGFyYXRvciA9IChyZWNpcGllbnQxLCByZWNpcGllbnQyKSA9PiB7XG4gICAgICBpZiAocmVjaXBpZW50MS5hZGRyZXNzICE9PSByZWNpcGllbnQyLmFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgYW1vdW50MSA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50MS5hbW91bnQpO1xuICAgICAgY29uc3QgYW1vdW50MiA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50Mi5hbW91bnQpO1xuICAgICAgcmV0dXJuIGFtb3VudDEudG9GaXhlZCgpID09PSBhbW91bnQyLnRvRml4ZWQoKTtcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgKHR4UGFyYW1zLnR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eFBhcmFtcy50eXBlID09PSAncGF5bWVudCcpICYmXG4gICAgICB0eXBlb2Ygb3V0cHV0LmFtb3VudCAhPT0gJ29iamVjdCcgJiZcbiAgICAgICFjb21wYXJhdG9yKG91dHB1dCwgZXhwZWN0ZWRPdXRwdXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGlmICh0eFBhcmFtcy50eXBlID09PSAnZW5hYmxldG9rZW4nKSB7XG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IHR4UGFyYW1zLnJlY2lwaWVudHNbMF07XG4gICAgICBpZiAoIXJlY2lwaWVudC50b2tlbk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNpcGllbnQgbXVzdCBpbmNsdWRlIGEgdG9rZW4gbmFtZS4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2lwaWVudEN1cnJlbmN5ID0gdXRpbHMuZ2V0WHJwQ3VycmVuY3lGcm9tVG9rZW5OYW1lKHJlY2lwaWVudC50b2tlbk5hbWUpLmN1cnJlbmN5O1xuICAgICAgaWYgKGNvaW5Db25maWcuaXNUb2tlbikge1xuICAgICAgICBpZiAocmVjaXBpZW50Q3VycmVuY3kgIT09IGNvaW5Db25maWcuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdG9rZW4gbmFtZSBzcGVjaWZpZWQgaW4gcmVjaXBpZW50cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoISgnYWNjb3VudCcgaW4gZXhwbGFuYXRpb24pIHx8ICEoJ2xpbWl0QW1vdW50JyBpbiBleHBsYW5hdGlvbikgfHwgIWV4cGxhbmF0aW9uLmxpbWl0QW1vdW50LmN1cnJlbmN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwbGFuYXRpb24gaXMgbWlzc2luZyByZXF1aXJlZCBrZXlzIChhY2NvdW50IG9yIGxpbWl0QW1vdW50IHdpdGggY3VycmVuY3kpJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlQWRkcmVzcyA9IGV4cGxhbmF0aW9uLmFjY291bnQ7XG4gICAgICBjb25zdCBjdXJyZW5jeSA9IGV4cGxhbmF0aW9uLmxpbWl0QW1vdW50LmN1cnJlbmN5O1xuXG4gICAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgIT09IGJhc2VBZGRyZXNzIHx8IHJlY2lwaWVudEN1cnJlbmN5ICE9PSBjdXJyZW5jeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgYSB2YWxpZCBYUlAgYWRkcmVzcywgYW5kIHRoZW4gbWFrZSBzdXJlIHRoZSByb290IGFkZHJlc3NlcyBtYXRjaC5cbiAgICogVGhpcyBwcmV2ZW50cyBhdHRhY2tzIHdoZXJlIGFuIGF0dGFjayBtYXkgc3dpdGNoIG91dCB0aGUgbmV3IGFkZHJlc3MgZm9yIG9uZSBvZiB0aGVpciBvd25cbiAgICogQHBhcmFtIGFkZHJlc3Mge1N0cmluZ30gdGhlIGFkZHJlc3MgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSByb290QWRkcmVzcyB7U3RyaW5nfSB0aGUgd2FsbGV0J3Mgcm9vdCBhZGRyZXNzXG4gICAqIEByZXR1cm4gdHJ1ZSBpZmYgYWRkcmVzcyBpcyBhIHdhbGxldCBhZGRyZXNzIChiYXNlZCBvbiByb290QWRkcmVzcylcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCByb290QWRkcmVzcyB9OiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmVyaWZpY2F0aW9uIGZhaWx1cmU6IGFkZHJlc3MgXCIke2FkZHJlc3N9XCIgaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudEluZm9QYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2luZm8nLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiBhZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ2N1cnJlbnQnLFxuICAgICAgICAgIHF1ZXVlOiB0cnVlLFxuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBzaWduZXJfbGlzdHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50SW5mbyA9IChhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5nZXRSaXBwbGVkVXJsKCkpLnNlbmQoYWNjb3VudEluZm9QYXJhbXMpKS5ib2R5O1xuXG4gICAgaWYgKGFjY291bnRJbmZvPy5yZXN1bHQ/LmFjY291bnRfZGF0YT8uRmxhZ3MgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFjY291bnQgaW5mb3JtYXRpb246IEZsYWdzIGZpZWxkIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3MgPSB4cnBsLnBhcnNlQWNjb3VudFJvb3RGbGFncyhhY2NvdW50SW5mby5yZXN1bHQuYWNjb3VudF9kYXRhLkZsYWdzKTtcblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuXG4gICAgaWYgKGZsYWdzLmxzZlJlcXVpcmVEZXN0VGFnICYmIGFkZHJlc3NEZXRhaWxzLmRlc3RpbmF0aW9uVGFnID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBJbnZhbGlkIEFkZHJlc3M6IERlc3RpbmF0aW9uIFRhZyBpcyByZXF1aXJlZCBmb3IgYWRkcmVzcyBcIiR7YWRkcmVzc31cIi5gKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkcmVzc0RldGFpbHMuYWRkcmVzcyAhPT0gcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6ICR7YWRkcmVzc0RldGFpbHMuYWRkcmVzc30gdnMuICR7cm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVUkwgb2YgYSB3ZWxsLWtub3duLCBwdWJsaWMgZmFjaW5nIChub24tYml0Z28pIHJpcHBsZWQgaW5zdGFuY2Ugd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJlY292ZXJ5XG4gICAqL1xuICBwdWJsaWMgZ2V0UmlwcGxlZFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnaHR0cHM6Ly9zMS5yaXBwbGUuY29tOjUxMjM0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogLSByb290QWRkcmVzczogcm9vdCBYUlAgd2FsbGV0IGFkZHJlc3MgdG8gcmVjb3ZlciBmdW5kcyBmcm9tXG4gICAqIC0gdXNlcktleTogW2VuY3J5cHRlZF0geHBydlxuICAgKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gICAqIC0gd2FsbGV0UGFzc3BocmFzZTogbmVjZXNzYXJ5IGlmIG9uZSBvZiB0aGUgeHBydnMgaXMgZW5jcnlwdGVkXG4gICAqIC0gYml0Z29LZXk6IHhwdWJcbiAgICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAgICogLSByZWNvdmVyeURlc3RpbmF0aW9uOiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJ5SW5mbyB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCByaXBwbGVkVXJsID0gdGhpcy5nZXRSaXBwbGVkVXJsKCk7XG4gICAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgneHB1YicpICYmICFwYXJhbXMudXNlcktleS5zdGFydHNXaXRoKCd4cHViJyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gcGFyYW1zLmJhY2t1cEtleS5zdGFydHNXaXRoKCd4cHViJykgJiYgcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgneHB1YicpO1xuXG4gICAgY29uc3QgYWNjb3VudEluZm9QYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2luZm8nLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiBwYXJhbXMucm9vdEFkZHJlc3MsXG4gICAgICAgICAgbGVkZ2VyX2luZGV4OiAnY3VycmVudCcsXG4gICAgICAgICAgcXVldWU6IHRydWUsXG4gICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgIHNpZ25lcl9saXN0czogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IGFjY291bnRMaW5lc1BhcmFtcyA9IHtcbiAgICAgIG1ldGhvZDogJ2FjY291bnRfbGluZXMnLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiBwYXJhbXMucm9vdEFkZHJlc3MsXG4gICAgICAgICAgbGVkZ2VyX2luZGV4OiAndmFsaWRhdGVkJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICBjaGVja0tyc1Byb3ZpZGVyKHRoaXMsIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyEnKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gZ2V0QmlwMzJLZXlzKHRoaXMuYml0Z28sIHBhcmFtcywgeyByZXF1aXJlQml0R29YcHViOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHsgYWRkcmVzc0RldGFpbHMsIGZlZURldGFpbHMsIHNlcnZlckRldGFpbHMsIGFjY291bnRMaW5lcyB9ID0gYXdhaXQgcHJvbWlzZVByb3BzKHtcbiAgICAgIGFkZHJlc3NEZXRhaWxzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZChhY2NvdW50SW5mb1BhcmFtcyksXG4gICAgICBmZWVEZXRhaWxzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZCh7IG1ldGhvZDogJ2ZlZScgfSksXG4gICAgICBzZXJ2ZXJEZXRhaWxzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZCh7IG1ldGhvZDogJ3NlcnZlcl9pbmZvJyB9KSxcbiAgICAgIGFjY291bnRMaW5lczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoYWNjb3VudExpbmVzUGFyYW1zKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wZW5MZWRnZXJGZWUgPSBuZXcgQmlnTnVtYmVyKGZlZURldGFpbHMuYm9keS5yZXN1bHQuZHJvcHMub3Blbl9sZWRnZXJfZmVlKTtcbiAgICBjb25zdCBiYXNlUmVzZXJ2ZSA9IG5ldyBCaWdOdW1iZXIoc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIucmVzZXJ2ZV9iYXNlX3hycCkudGltZXMoXG4gICAgICB0aGlzLmdldEJhc2VGYWN0b3IoKVxuICAgICk7XG4gICAgY29uc3QgcmVzZXJ2ZURlbHRhID0gbmV3IEJpZ051bWJlcihzZXJ2ZXJEZXRhaWxzLmJvZHkucmVzdWx0LmluZm8udmFsaWRhdGVkX2xlZGdlci5yZXNlcnZlX2luY194cnApLnRpbWVzKFxuICAgICAgdGhpcy5nZXRCYXNlRmFjdG9yKClcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRMZWRnZXIgPSBzZXJ2ZXJEZXRhaWxzLmJvZHkucmVzdWx0LmluZm8udmFsaWRhdGVkX2xlZGdlci5zZXE7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IGFkZHJlc3NEZXRhaWxzLmJvZHkucmVzdWx0LmFjY291bnRfZGF0YS5TZXF1ZW5jZTtcbiAgICBjb25zdCBiYWxhbmNlID0gbmV3IEJpZ051bWJlcihhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuQmFsYW5jZSk7XG4gICAgY29uc3Qgc2lnbmVyTGlzdHMgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuc2lnbmVyX2xpc3RzO1xuICAgIGNvbnN0IGFjY291bnRGbGFncyA9IGFkZHJlc3NEZXRhaWxzLmJvZHkucmVzdWx0LmFjY291bnRfZGF0YS5GbGFncztcbiAgICBjb25zdCBvd25lckNvdW50ID0gbmV3IEJpZ051bWJlcihhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuT3duZXJDb3VudCk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgc2lnbmVyIGxpc3Qgc2V0XG4gICAgaWYgKHNpZ25lckxpc3RzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNldCBvZiBzaWduZXIgbGlzdHMnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHNpZ25lcnMgYXJlIHVzZXIsIGJhY2t1cCwgYml0Z29cbiAgICBjb25zdCB1c2VyQWRkcmVzcyA9IHJpcHBsZUtleXBhaXJzLmRlcml2ZUFkZHJlc3Moa2V5c1swXS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBjb25zdCBiYWNrdXBBZGRyZXNzID0gcmlwcGxlS2V5cGFpcnMuZGVyaXZlQWRkcmVzcyhrZXlzWzFdLnB1YmxpY0tleS50b1N0cmluZygnaGV4JykpO1xuXG4gICAgY29uc3Qgc2lnbmVyTGlzdCA9IHNpZ25lckxpc3RzWzBdO1xuICAgIGlmIChzaWduZXJMaXN0LlNpZ25lclF1b3J1bSAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1pbmltdW0gc2lnbmF0dXJlIGNvdW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kQWRkcmVzc2VzID0ge307XG5cbiAgICBjb25zdCBzaWduZXJFbnRyaWVzID0gc2lnbmVyTGlzdC5TaWduZXJFbnRyaWVzO1xuICAgIGlmIChzaWduZXJFbnRyaWVzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25lciBsaXN0IGxlbmd0aCcpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgU2lnbmVyRW50cnkgfSBvZiBzaWduZXJFbnRyaWVzKSB7XG4gICAgICBjb25zdCB3ZWlnaHQgPSBTaWduZXJFbnRyeS5TaWduZXJXZWlnaHQ7XG4gICAgICBjb25zdCBhZGRyZXNzID0gU2lnbmVyRW50cnkuQWNjb3VudDtcbiAgICAgIGlmICh3ZWlnaHQgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25lciB3ZWlnaHQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgaXQncyBhIGR1cGUgb2YgYW4gYWRkcmVzcyB3ZSBhbHJlYWR5IGtub3csIGJsb2NrXG4gICAgICBpZiAoZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gPj0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2R1cGxpY2F0ZSBzaWduZXIgYWRkcmVzcycpO1xuICAgICAgfVxuICAgICAgZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gPSAoZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIGlmIChmb3VuZEFkZHJlc3Nlc1t1c2VyQWRkcmVzc10gIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBpbmNpZGVuY2UgZnJlcXVlbmN5IG9mIHVzZXIgc2lnbmVyIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKGZvdW5kQWRkcmVzc2VzW2JhY2t1cEFkZHJlc3NdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgaW5jaWRlbmNlIGZyZXF1ZW5jeSBvZiB1c2VyIHNpZ25lciBhZGRyZXNzJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBmbGFncyBkaXNhYmxlIHRoZSBtYXN0ZXIga2V5IGFuZCBlbmZvcmNlIGRlc3RpbmF0aW9uIHRhZ3NcbiAgICBjb25zdCBVU0VSX0tFWV9TRVRUSU5HX0ZMQUcgPSA2NTUzNjtcbiAgICBjb25zdCBNQVNURVJfS0VZX0RFQUNUSVZBVElPTl9GTEFHID0gMTA0ODU3NjtcbiAgICBjb25zdCBSRVFVSVJFX0RFU1RJTkFUSU9OX1RBR19GTEFHID0gMTMxMDcyO1xuICAgIGlmICgoYWNjb3VudEZsYWdzICYgVVNFUl9LRVlfU0VUVElOR19GTEFHKSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhIGN1c3RvbSB1c2VyIGtleSBoYXMgYmVlbiBzZXQnKTtcbiAgICB9XG4gICAgaWYgKChhY2NvdW50RmxhZ3MgJiBNQVNURVJfS0VZX0RFQUNUSVZBVElPTl9GTEFHKSAhPT0gTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgbWFzdGVyIGtleSBoYXMgbm90IGJlZW4gZGVhY3RpdmF0ZWQnKTtcbiAgICB9XG4gICAgaWYgKChhY2NvdW50RmxhZ3MgJiBSRVFVSVJFX0RFU1RJTkFUSU9OX1RBR19GTEFHKSAhPT0gUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgZGVzdGluYXRpb24gZmxhZyByZXF1aXJlbWVudCBoYXMgbm90IGJlZW4gYWN0aXZhdGVkJyk7XG4gICAgfVxuXG4gICAgLy8gcmVjb3ZlciB0aGUgZnVuZHNcbiAgICBjb25zdCB0b3RhbFJlc2VydmVEZWx0YSA9IHJlc2VydmVEZWx0YS50aW1lcyhvd25lckNvdW50KTtcbiAgICBjb25zdCByZXNlcnZlID0gYmFzZVJlc2VydmUucGx1cyh0b3RhbFJlc2VydmVEZWx0YSk7XG4gICAgY29uc3QgcmVjb3ZlcmFibGVCYWxhbmNlID0gYmFsYW5jZS5taW51cyhyZXNlcnZlKTtcblxuICAgIGNvbnN0IHJhd0Rlc3RpbmF0aW9uID0gcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25EZXRhaWxzID0gdXJsLnBhcnNlKHJhd0Rlc3RpbmF0aW9uKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMuZHQpKSB7XG4gICAgICAgIC8vIGlmIHF1ZXJ5RGV0YWlscy5kdCBpcyBhbiBhcnJheSwgdGhhdCBtZWFucyBkdCB3YXMgZ2l2ZW4gbXVsdGlwbGUgdGltZXMsIHdoaWNoIGlzIG5vdCB2YWxpZFxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihcbiAgICAgICAgICBgZGVzdGluYXRpb24gdGFnIGNhbiBhcHBlYXIgYXQgbW9zdCBvbmNlLCBidXQgJHtxdWVyeURldGFpbHMuZHQubGVuZ3RofSBkZXN0aW5hdGlvbiB0YWdzIHdlcmUgZm91bmRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJhYmxlQmFsYW5jZS50b051bWJlcigpIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFF1YW50aXR5IG9mIFhSUCB0byByZWNvdmVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIEN1cnJlbnQgYmFsYW5jZTogJHtiYWxhbmNlLnRvTnVtYmVyKCl9LCBibG9ja2NoYWluIHJlc2VydmU6ICR7cmVzZXJ2ZS50b051bWJlcigpfSwgc3BlbmRhYmxlIGJhbGFuY2U6ICR7cmVjb3ZlcmFibGVCYWxhbmNlLnRvTnVtYmVyKCl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc3N1ZXIgPSBwYXJhbXM/Lmlzc3VlckFkZHJlc3M7XG4gICAgY29uc3QgY3VycmVuY3kgPSBwYXJhbXM/LmN1cnJlbmN5Q29kZTtcbiAgICBpZiAoISFpc3N1ZXIgJiYgISFjdXJyZW5jeSkge1xuICAgICAgY29uc3QgdG9rZW5QYXJhbXMgPSB7XG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICByZWNvdmVyYWJsZUJhbGFuY2UsXG4gICAgICAgIGN1cnJlbnRMZWRnZXIsXG4gICAgICAgIG9wZW5MZWRnZXJGZWUsXG4gICAgICAgIHNlcXVlbmNlSWQsXG4gICAgICAgIGFjY291bnRMaW5lcyxcbiAgICAgICAga2V5cyxcbiAgICAgICAgaXNLcnNSZWNvdmVyeSxcbiAgICAgICAgaXNVbnNpZ25lZFN3ZWVwLFxuICAgICAgICB1c2VyQWRkcmVzcyxcbiAgICAgICAgYmFja3VwQWRkcmVzcyxcbiAgICAgICAgaXNzdWVyLFxuICAgICAgICBjdXJyZW5jeSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJlY292ZXJYcnBUb2tlbihwYXJhbXMsIHRva2VuUGFyYW1zKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkgYXMgVHJhbnNmZXJCdWlsZGVyO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnRvKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIGFzIHN0cmluZylcbiAgICAgIC5hbW91bnQocmVjb3ZlcmFibGVCYWxhbmNlLnRvRml4ZWQoMCkpXG4gICAgICAuc2VuZGVyKHBhcmFtcy5yb290QWRkcmVzcylcbiAgICAgIC5mbGFncygyMTQ3NDgzNjQ4KVxuICAgICAgLmxhc3RMZWRnZXJTZXF1ZW5jZShjdXJyZW50TGVkZ2VyICsgMTAwMDAwMCkgLy8gZ2l2ZSBpdCAxIG1pbGxpb24gbGVkZ2VycycgdGltZSAofjEgbW9udGgsIHN1aXRhYmxlIGZvciBLUlMpXG4gICAgICAuZmVlKG9wZW5MZWRnZXJGZWUudGltZXMoMykudG9GaXhlZCgwKSkgLy8gdGhlIGZhY3RvciB0aHJlZSBpcyBmb3IgdGhlIG11bHRpc2lnbmluZ1xuICAgICAgLnNlcXVlbmNlKHNlcXVlbmNlSWQpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJLZXkgPSBrZXlzWzBdLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHNlcmlhbGl6ZWRUeCwgdXNlcktleSwgeyBzaWduQXM6IHVzZXJBZGRyZXNzIH0pO1xuXG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBzdHJpbmc7XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSB1c2VyU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWtleXNbMV0ucHJpdmF0ZUtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhY2t1cEtleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFja3VwS2V5ID0ga2V5c1sxXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJhY2t1cFNpZ25hdHVyZSA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkoc2VyaWFsaXplZFR4LCBiYWNrdXBLZXksIHsgc2lnbkFzOiBiYWNrdXBBZGRyZXNzIH0pO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSByaXBwbGUubXVsdGlzaWduKFt1c2VyU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uLCBiYWNrdXBTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb25dKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIH0pKSBhcyBSZWNvdmVyeUluZm87XG5cbiAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLnR4SGV4ID0gc2lnbmVkVHJhbnNhY3Rpb247XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5iYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5O1xuICAgICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5jb2luID0gdGhpcy5nZXRDaGFpbigpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyWHJwVG9rZW4ocGFyYW1zLCB0b2tlblBhcmFtcykge1xuICAgIGNvbnN0IHsgY3VycmVuY3ksIGlzc3VlciB9ID0gdG9rZW5QYXJhbXM7XG4gICAgY29uc3QgdG9rZW5OYW1lID0gKHV0aWxzLmdldFhycFRva2VuKGlzc3VlciwgY3VycmVuY3kpIGFzIFhycENvaW4pLm5hbWU7XG4gICAgY29uc3QgbGluZXMgPSB0b2tlblBhcmFtcy5hY2NvdW50TGluZXMuYm9keS5yZXN1bHQubGluZXM7XG5cbiAgICBsZXQgYW1vdW50O1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgaWYgKGxpbmUuY3VycmVuY3kgPT09IGN1cnJlbmN5ICYmIGxpbmUuYWNjb3VudCA9PT0gaXNzdWVyKSB7XG4gICAgICAgIGFtb3VudCA9IGxpbmUuYmFsYW5jZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERvZXMgbm90IGhhdmUgVHJ1c3RsaW5lIHdpdGggJHtpc3N1ZXJ9YCk7XG4gICAgfVxuICAgIGlmIChhbW91bnQgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb2VzIG5vdCBoYXZlIGZ1bmRzIHRvIHJlY292ZXJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNpbWFsUGxhY2VzID0gY29pbnMuZ2V0KHRva2VuTmFtZSkuZGVjaW1hbFBsYWNlcztcbiAgICBhbW91bnQgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCkuc2hpZnRlZEJ5KGRlY2ltYWxQbGFjZXMpLnRvRml4ZWQoKTtcblxuICAgIGNvbnN0IEZMQUdfVkFMVUUgPSAyMTQ3NDgzNjQ4O1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0b2tlbk5hbWUpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCkgYXMgVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudG8odG9rZW5QYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbilcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnNlbmRlcihwYXJhbXMucm9vdEFkZHJlc3MpXG4gICAgICAuZmxhZ3MoRkxBR19WQUxVRSlcbiAgICAgIC5sYXN0TGVkZ2VyU2VxdWVuY2UodG9rZW5QYXJhbXMuY3VycmVudExlZGdlciArIDEwMDAwMDApIC8vIGdpdmUgaXQgMSBtaWxsaW9uIGxlZGdlcnMnIHRpbWUgKH4xIG1vbnRoLCBzdWl0YWJsZSBmb3IgS1JTKVxuICAgICAgLmZlZSh0b2tlblBhcmFtcy5vcGVuTGVkZ2VyRmVlLnRpbWVzKDMpLnRvRml4ZWQoMCkpIC8vIHRoZSBmYWN0b3IgdGhyZWUgaXMgZm9yIHRoZSBtdWx0aXNpZ25pbmdcbiAgICAgIC5zZXF1ZW5jZSh0b2tlblBhcmFtcy5zZXF1ZW5jZUlkKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGNvbnN0IHsga2V5cywgaXNLcnNSZWNvdmVyeSwgaXNVbnNpZ25lZFN3ZWVwLCB1c2VyQWRkcmVzcywgYmFja3VwQWRkcmVzcyB9ID0gdG9rZW5QYXJhbXM7XG5cbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4LFxuICAgICAgICBjb2luOiB0aGlzLmdldENoYWluKCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgha2V5c1swXS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXJLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyS2V5ID0ga2V5c1swXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleShzZXJpYWxpemVkVHgsIHVzZXJLZXksIHsgc2lnbkFzOiB1c2VyQWRkcmVzcyB9KTtcblxuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IGtleXNbMV0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBiYWNrdXBTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHNlcmlhbGl6ZWRUeCwgYmFja3VwS2V5LCB7IHNpZ25BczogYmFja3VwQWRkcmVzcyB9KTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gcmlwcGxlLm11bHRpc2lnbihbdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbiwgYmFja3VwU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuXG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHNpZ25lZFRyYW5zYWN0aW9uO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFhycEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IFhycEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICBpZiAoIWtleXMueHBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy54cHViLFxuICAgICAgcHJ2OiBrZXlzLnhwcnYsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiJdfQ==
@@ -11,6 +11,7 @@ export declare class XrpToken extends Xrp {
11
11
  get network(): string;
12
12
  get issuerAddress(): string;
13
13
  get currencyCode(): string;
14
+ get contractAddress(): string;
14
15
  get domain(): string;
15
16
  get decimalPlaces(): number;
16
17
  getChain(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"xrpToken.d.ts","sourceRoot":"","sources":["../../src/xrpToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,cAAc,EAAU,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAExF,qBAAa,QAAS,SAAQ,GAAG;IAC/B,SAAgB,WAAW,EAAE,cAAc,CAAC;gBAEhC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc;IAMzD,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;IAItE,MAAM,CAAC,uBAAuB,IAAI,oBAAoB,EAAE;IASxD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;CAGxB"}
1
+ {"version":3,"file":"xrpToken.d.ts","sourceRoot":"","sources":["../../src/xrpToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,cAAc,EAAU,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAExF,qBAAa,QAAS,SAAQ,GAAG;IAC/B,SAAgB,WAAW,EAAE,cAAc,CAAC;gBAEhC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc;IAMzD,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;IAItE,MAAM,CAAC,uBAAuB,IAAI,oBAAoB,EAAE;IASxD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;CAGxB"}
@@ -35,6 +35,9 @@ class XrpToken extends xrp_1.Xrp {
35
35
  get currencyCode() {
36
36
  return this.tokenConfig.currencyCode;
37
37
  }
38
+ get contractAddress() {
39
+ return this.tokenConfig.contractAddress;
40
+ }
38
41
  get domain() {
39
42
  return this.tokenConfig.domain || '';
40
43
  }
@@ -55,4 +58,4 @@ class XrpToken extends xrp_1.Xrp {
55
58
  }
56
59
  }
57
60
  exports.XrpToken = XrpToken;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveHJwVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQW9FO0FBQ3BFLCtCQUE0QjtBQUc1QixNQUFhLFFBQVMsU0FBUSxTQUFHO0lBRy9CLFlBQVksS0FBZ0IsRUFBRSxXQUEyQjtRQUN2RCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RixLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBc0I7UUFDbEQsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QjtRQUM1QixNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNqRixNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRjtBQWpFRCw0QkFpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucywgWHJwVG9rZW5Db25maWcsIHRva2VucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgWHJwIH0gZnJvbSAnLi94cnAnO1xuaW1wb3J0IHsgQml0R29CYXNlLCBDb2luQ29uc3RydWN0b3IsIE5hbWVkQ29pbkNvbnN0cnVjdG9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgWHJwVG9rZW4gZXh0ZW5kcyBYcnAge1xuICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5Db25maWc6IFhycFRva2VuQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHRva2VuQ29uZmlnOiBYcnBUb2tlbkNvbmZpZykge1xuICAgIGNvbnN0IHN0YXRpY3NDb2luID0gdG9rZW5Db25maWcubmV0d29yayA9PT0gJ01haW5uZXQnID8gY29pbnMuZ2V0KCd4cnAnKSA6IGNvaW5zLmdldCgndHhycCcpO1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gICAgdGhpcy50b2tlbkNvbmZpZyA9IHRva2VuQ29uZmlnO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3IoY29uZmlnOiBYcnBUb2tlbkNvbmZpZyk6IENvaW5Db25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIChiaXRnbzogQml0R29CYXNlKSA9PiBuZXcgWHJwVG9rZW4oYml0Z28sIGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKTogTmFtZWRDb2luQ29uc3RydWN0b3JbXSB7XG4gICAgY29uc3QgdG9rZW5zQ3RvcnM6IE5hbWVkQ29pbkNvbnN0cnVjdG9yW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIFsuLi50b2tlbnMuYml0Y29pbi54cnAudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC54cnAudG9rZW5zXSkge1xuICAgICAgY29uc3QgdG9rZW5Db25zdHJ1Y3RvciA9IFhycFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW4pO1xuICAgICAgdG9rZW5zQ3RvcnMucHVzaCh7IG5hbWU6IHRva2VuLnR5cGUsIGNvaW5Db25zdHJ1Y3RvcjogdG9rZW5Db25zdHJ1Y3RvciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vuc0N0b3JzO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5uYW1lO1xuICB9XG5cbiAgZ2V0IGNvaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5jb2luO1xuICB9XG5cbiAgZ2V0IG5ldHdvcmsoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5uZXR3b3JrO1xuICB9XG5cbiAgZ2V0IGlzc3VlckFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5pc3N1ZXJBZGRyZXNzO1xuICB9XG5cbiAgZ2V0IGN1cnJlbmN5Q29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmN1cnJlbmN5Q29kZTtcbiAgfVxuXG4gIGdldCBkb21haW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5kb21haW4gfHwgJyc7XG4gIH1cblxuICBnZXQgZGVjaW1hbFBsYWNlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXM7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2luO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1hycCBUb2tlbic7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXMpO1xuICB9XG59XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveHJwVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQW9FO0FBQ3BFLCtCQUE0QjtBQUc1QixNQUFhLFFBQVMsU0FBUSxTQUFHO0lBRy9CLFlBQVksS0FBZ0IsRUFBRSxXQUEyQjtRQUN2RCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RixLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBc0I7UUFDbEQsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QjtRQUM1QixNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNqRixNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUFyRUQsNEJBcUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMsIFhycFRva2VuQ29uZmlnLCB0b2tlbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFhycCB9IGZyb20gJy4veHJwJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgQ29pbkNvbnN0cnVjdG9yLCBOYW1lZENvaW5Db25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGNsYXNzIFhycFRva2VuIGV4dGVuZHMgWHJwIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBYcnBUb2tlbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogWHJwVG9rZW5Db25maWcpIHtcbiAgICBjb25zdCBzdGF0aWNzQ29pbiA9IHRva2VuQ29uZmlnLm5ldHdvcmsgPT09ICdNYWlubmV0JyA/IGNvaW5zLmdldCgneHJwJykgOiBjb2lucy5nZXQoJ3R4cnAnKTtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICAgIHRoaXMudG9rZW5Db25maWcgPSB0b2tlbkNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9yKGNvbmZpZzogWHJwVG9rZW5Db25maWcpOiBDb2luQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiAoYml0Z286IEJpdEdvQmFzZSkgPT4gbmV3IFhycFRva2VuKGJpdGdvLCBjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCk6IE5hbWVkQ29pbkNvbnN0cnVjdG9yW10ge1xuICAgIGNvbnN0IHRva2Vuc0N0b3JzOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdID0gW107XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBbLi4udG9rZW5zLmJpdGNvaW4ueHJwLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQueHJwLnRva2Vuc10pIHtcbiAgICAgIGNvbnN0IHRva2VuQ29uc3RydWN0b3IgPSBYcnBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuKTtcbiAgICAgIHRva2Vuc0N0b3JzLnB1c2goeyBuYW1lOiB0b2tlbi50eXBlLCBjb2luQ29uc3RydWN0b3I6IHRva2VuQ29uc3RydWN0b3IgfSk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnNDdG9ycztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmFtZTtcbiAgfVxuXG4gIGdldCBjb2luKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuY29pbjtcbiAgfVxuXG4gIGdldCBuZXR3b3JrKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmV0d29yaztcbiAgfVxuXG4gIGdldCBpc3N1ZXJBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuaXNzdWVyQWRkcmVzcztcbiAgfVxuXG4gIGdldCBjdXJyZW5jeUNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5jdXJyZW5jeUNvZGU7XG4gIH1cblxuICBnZXQgY29udHJhY3RBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuY29udHJhY3RBZGRyZXNzO1xuICB9XG5cbiAgZ2V0IGRvbWFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRvbWFpbiB8fCAnJztcbiAgfVxuXG4gIGdldCBkZWNpbWFsUGxhY2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuZGVjaW1hbFBsYWNlcztcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcudHlwZTtcbiAgfVxuXG4gIGdldEJhc2VDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvaW47XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnWHJwIFRva2VuJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMudG9rZW5Db25maWcuZGVjaW1hbFBsYWNlcyk7XG4gIH1cbn1cbiJdfQ==