@bitgo-beta/sdk-api 1.10.1-beta.1816 → 1.10.1-beta.1818
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.
|
@@ -619,6 +619,76 @@ describe('Constructor', function () {
|
|
|
619
619
|
setTokenStub.called.should.be.false();
|
|
620
620
|
});
|
|
621
621
|
});
|
|
622
|
+
describe('addAccessToken()', function () {
|
|
623
|
+
const validParams = {
|
|
624
|
+
label: 'test-token',
|
|
625
|
+
scope: ['wallet_view_all'],
|
|
626
|
+
duration: 3600,
|
|
627
|
+
};
|
|
628
|
+
it('should use HMAC auth when ecdhXprv is absent but hmacAuthStrategy is authenticated', async function () {
|
|
629
|
+
const { strategy } = makeStrategy({
|
|
630
|
+
isAuthenticated: sinon.stub().returns(true),
|
|
631
|
+
});
|
|
632
|
+
const bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: ROOT, hmacAuthStrategy: strategy });
|
|
633
|
+
// Do NOT set _ecdhXprv — simulates SSO/WebCrypto session
|
|
634
|
+
// Set a v2x token so the request goes through the v2 auth path
|
|
635
|
+
bitgo.authenticateWithAccessToken({ accessToken: 'v2xstrategytoken' });
|
|
636
|
+
const scope = (0, nock_1.default)(ROOT).post('/api/auth/v1/accesstoken').reply(200, {
|
|
637
|
+
token: 'v2xnewplaintoken',
|
|
638
|
+
label: 'test-token',
|
|
639
|
+
});
|
|
640
|
+
const result = await bitgo.addAccessToken(validParams);
|
|
641
|
+
scope.isDone().should.be.true();
|
|
642
|
+
// forceV1Auth should NOT have been set, so no downgrade warning
|
|
643
|
+
result.should.not.have.property('warning');
|
|
644
|
+
// The plain token from the response body should be returned directly
|
|
645
|
+
result.token.should.equal('v2xnewplaintoken');
|
|
646
|
+
});
|
|
647
|
+
it('should return plain token from response body when ecdhXprv is absent but strategyAuthenticated', async function () {
|
|
648
|
+
const handleTokenSpy = sinon.spy(bitgoAPI_1.BitGoAPI.prototype, 'handleTokenIssuanceAsync');
|
|
649
|
+
const { strategy } = makeStrategy({
|
|
650
|
+
isAuthenticated: sinon.stub().returns(true),
|
|
651
|
+
});
|
|
652
|
+
const bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: ROOT, hmacAuthStrategy: strategy });
|
|
653
|
+
bitgo.authenticateWithAccessToken({ accessToken: 'v2xstrategytoken' });
|
|
654
|
+
(0, nock_1.default)(ROOT).post('/api/auth/v1/accesstoken').reply(200, {
|
|
655
|
+
token: 'v2xplaintoken',
|
|
656
|
+
label: 'test-token',
|
|
657
|
+
});
|
|
658
|
+
const result = await bitgo.addAccessToken(validParams);
|
|
659
|
+
// handleTokenIssuanceAsync should NOT be called — no ECDH decryption needed
|
|
660
|
+
handleTokenSpy.called.should.be.false();
|
|
661
|
+
result.token.should.equal('v2xplaintoken');
|
|
662
|
+
handleTokenSpy.restore();
|
|
663
|
+
});
|
|
664
|
+
it('should still force V1 auth when neither ecdhXprv nor strategy is authenticated', async function () {
|
|
665
|
+
const { strategy } = makeStrategy({
|
|
666
|
+
isAuthenticated: sinon.stub().returns(false),
|
|
667
|
+
});
|
|
668
|
+
const bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: ROOT, hmacAuthStrategy: strategy });
|
|
669
|
+
bitgo.authenticateWithAccessToken({ accessToken: 'v2xlegacytoken' });
|
|
670
|
+
(0, nock_1.default)(ROOT).post('/api/auth/v1/accesstoken').reply(200, {
|
|
671
|
+
token: 'v2xlegacyresult',
|
|
672
|
+
label: 'test-token',
|
|
673
|
+
});
|
|
674
|
+
const result = await bitgo.addAccessToken(validParams);
|
|
675
|
+
// V1 auth path should add the downgrade warning
|
|
676
|
+
result.warning.should.match(/protocol downgrade/);
|
|
677
|
+
});
|
|
678
|
+
it('should still force V1 auth when isAuthenticated is not defined on strategy', async function () {
|
|
679
|
+
const { strategy } = makeStrategy();
|
|
680
|
+
// strategy has no isAuthenticated method by default from makeStrategy
|
|
681
|
+
const bitgo = new bitgoAPI_1.BitGoAPI({ env: 'custom', customRootURI: ROOT, hmacAuthStrategy: strategy });
|
|
682
|
+
bitgo.authenticateWithAccessToken({ accessToken: 'v2xnoauthmethod' });
|
|
683
|
+
(0, nock_1.default)(ROOT).post('/api/auth/v1/accesstoken').reply(200, {
|
|
684
|
+
token: 'v2xresult',
|
|
685
|
+
label: 'test-token',
|
|
686
|
+
});
|
|
687
|
+
const result = await bitgo.addAccessToken(validParams);
|
|
688
|
+
// Without isAuthenticated, should fall back to V1 auth
|
|
689
|
+
result.warning.should.match(/protocol downgrade/);
|
|
690
|
+
});
|
|
691
|
+
});
|
|
622
692
|
});
|
|
623
693
|
describe('constants parameter', function () {
|
|
624
694
|
it('should allow passing constants via options and expose via fetchConstants', async function () {
|
|
@@ -954,4 +1024,4 @@ describe('Constructor', function () {
|
|
|
954
1024
|
});
|
|
955
1025
|
});
|
|
956
1026
|
});
|
|
957
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYml0Z29BUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsa0JBQWdCO0FBQ2hCLGlEQUE4QztBQUM5Qyw2Q0FBeUM7QUFDekMsNkNBQStCO0FBQy9CLGdEQUF3QjtBQUd4QixRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtRQUM3QyxFQUFFLENBQUMsaURBQWlELEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyx5QkFBeUIsRUFBRSxJQUFJO2FBQ2hDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMseUJBQXlCLEVBQUUsS0FBSzthQUNqQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxTQUFTLENBQUM7WUFDUixjQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztZQUN0RSxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7Z0JBQzFDLGVBQWUsRUFBRSxjQUFjO2FBQ2hDLENBQUMsQ0FBQztZQUVILE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBSSxFQUFDLDJCQUEyQixDQUFDO2lCQUM1QyxHQUFHLENBQUMsY0FBYyxDQUFDO2lCQUNuQixXQUFXLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztpQkFDMUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWhDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUU7b0JBQ0wsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU87b0JBQ3ZCLEdBQUcsRUFBRSxHQUFHLEVBQUU7d0JBQ1IsVUFBVTtvQkFDWixDQUFDO2lCQUNLO2FBQ1QsQ0FBQyxDQUFDO1lBRUgsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztZQUM3RSxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFJLEVBQUMsMkJBQTJCLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxjQUFjLENBQUM7aUJBQ25CLFdBQVcsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDO2lCQUNwQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFaEMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNmLEtBQUssRUFBRTtvQkFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTztvQkFDdkIsR0FBRyxFQUFFLEdBQUcsRUFBRTt3QkFDUixVQUFVO29CQUNaLENBQUM7aUJBQ0s7YUFDVCxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxLQUFLO1lBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMsZUFBZSxFQUFFLFdBQVc7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFJLEVBQUMsMkJBQTJCLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxjQUFjLENBQUM7aUJBQ25CLFdBQVcsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUM7aUJBQy9DLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVoQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsS0FBSyxFQUFFO29CQUNMLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXO29CQUMzQixHQUFHLEVBQUUsR0FBRyxFQUFFO3dCQUNSLFVBQVU7b0JBQ1osQ0FBQztpQkFDSzthQUNULENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEtBQUs7WUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyxlQUFlLEVBQUUsRUFBRTthQUNwQixDQUFDLENBQUM7WUFFSCxNQUFNLEtBQUssR0FBRyxJQUFBLGNBQUksRUFBQywyQkFBMkIsQ0FBQztpQkFDNUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztpQkFDbkIsV0FBVyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7aUJBQ3BDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVoQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsS0FBSyxFQUFFO29CQUNMLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO29CQUN6QixHQUFHLEVBQUUsR0FBRyxFQUFFO3dCQUNSLFVBQVU7b0JBQ1osQ0FBQztpQkFDSzthQUNULENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHVFQUF1RSxFQUFFO1lBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSx3QkFBVSxDQUFDO2dCQUN0QyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCO2FBQzlDLENBQUMsQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMsZ0JBQWdCO2FBQ2pCLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjthQUMzQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxlQUFlLEVBQUU7UUFDeEIsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLE1BQU07YUFDWixDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLE1BQU07YUFDWixDQUFDLENBQUM7WUFFSCxLQUFLO2lCQUNGLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnRUFBZ0UsRUFBRSxDQUFDO2lCQUM1RixNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ2QsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsYUFBYSxFQUFFLHdCQUF3QjthQUN4QyxDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUM7WUFDMUIsTUFBTSxXQUFXLEdBQUcseUNBQXlDLENBQUM7WUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsTUFBTTtnQkFDWCxhQUFhLEVBQUUsd0JBQXdCO2FBQ3hDLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQztZQUMxQixNQUFNLFdBQVcsR0FBRyx5Q0FBeUMsQ0FBQztZQUM5RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxNQUFNO2dCQUNYLGFBQWEsRUFBRSx3QkFBd0I7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDO1lBQzFCLE1BQU0sV0FBVyxHQUFHLHlDQUF5QyxDQUFDO1lBQzlELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFO1lBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsYUFBYSxFQUFFLHdCQUF3QjthQUN4QyxDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUM7WUFDMUIsTUFBTSxXQUFXLEdBQUcseUNBQXlDLENBQUM7WUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixJQUFJLEtBQWUsQ0FBQztRQUVwQixVQUFVLENBQUM7WUFDVCxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUM7WUFDUixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUU7WUFDM0MsbUVBQW1FO1lBQ25FLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFO1lBQ3pELDBEQUEwRDtZQUMxRCxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2pFLDhDQUE4QyxDQUMvQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7WUFDeEMsMERBQTBEO1lBQzFELENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDM0csQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUU7WUFDOUQsd0RBQXdEO1lBQ3hELENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzVHLDRDQUE0QyxDQUM3QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUU7WUFDbEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUM3RixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUNoQix5QkFBeUIsRUFBRTtvQkFDekIsb0RBQW9EO29CQUNwRCxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRTtpQkFDbkM7Z0JBQ0QsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBRWhFLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDaEIseUJBQXlCLEVBQUU7b0JBQ3pCLHdEQUF3RDtvQkFDeEQsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRTtpQkFDbEQ7Z0JBQ0QsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFO1lBQ2hFLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDaEIseUJBQXlCLEVBQUU7b0JBQ3pCLHdEQUF3RDtvQkFDeEQsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO2lCQUM1QjtnQkFDRCxRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7WUFFcEUsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUNoQix5QkFBeUIsRUFBRTtvQkFDekIsd0RBQXdEO29CQUN4RCxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRTtpQkFDL0M7Z0JBQ0QsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFO1lBQzNELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyRCxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUVsRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUMvQix5QkFBeUIsRUFBRTtvQkFDekIsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRTtvQkFDN0QsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRTtpQkFDOUQ7Z0JBQ0QsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtZQUNsRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxXQUFXO2lCQUNSLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUM7aUJBQ2hFLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDMUMsV0FBVztpQkFDUixRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO2lCQUNoRSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDL0IseUJBQXlCLEVBQUU7b0JBQ3pCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7b0JBQzdELEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7b0JBQzdELEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7b0JBQzdELEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7aUJBQzlEO2dCQUNELFFBQVEsRUFBRSxhQUFhO2FBQ3hCLENBQUMsQ0FBQztZQUVILFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMzQixJQUFJLEtBQWUsQ0FBQztRQUVwQixVQUFVLENBQUM7WUFDVCxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUM7WUFDUixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSztZQUNoRSxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzNELGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNELGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFFeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzFDLHlCQUF5QixFQUFFO29CQUN6QixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO29CQUM3RCxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO2lCQUM5RDtnQkFDRCxRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUs7WUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztZQUMzRCxnQkFBZ0I7aUJBQ2IsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQztpQkFDaEUsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUMzQyxnQkFBZ0I7aUJBQ2IsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQztpQkFDaEUsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUMzQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzFDLHlCQUF5QixFQUFFO29CQUN6QixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO29CQUM3RCxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO29CQUM3RCxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO29CQUM3RCxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO2lCQUM5RDtnQkFDRCxRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUM7WUFFSCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTtRQUNqRCxTQUFTLENBQUM7WUFDUixjQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEtBQUs7WUFDNUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyxTQUFTLEVBQUUsZUFBZTthQUMzQixDQUFDLENBQUM7WUFFSCx5RUFBeUU7WUFDekUsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFMUMsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFJLEVBQUMsMkJBQTJCLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxjQUFjLENBQUM7aUJBQ25CLFdBQVcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDO2lCQUMxQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFaEMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNmLEtBQUssRUFBRTtvQkFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVTtvQkFDMUIsR0FBRyxFQUFFLEdBQUcsRUFBRTt3QkFDUixVQUFVO29CQUNaLENBQUM7aUJBQ0s7YUFDVCxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RkFBd0YsRUFBRSxLQUFLO1lBQ2hHLHlEQUF5RDtZQUN6RCxNQUFNLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN2QyxNQUFjLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztZQUVwQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO29CQUN6QixHQUFHLEVBQUUsUUFBUTtvQkFDYixhQUFhLEVBQUUsMkJBQTJCO29CQUMxQyxTQUFTLEVBQUUsZUFBZTtpQkFDM0IsQ0FBQyxDQUFDO2dCQUVILE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBSSxFQUFDLDJCQUEyQixDQUFDO3FCQUM1QyxHQUFHLENBQUMsY0FBYyxDQUFDO3FCQUNuQixLQUFLLENBQUM7b0JBQ0wsMERBQTBEO29CQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDakQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7b0JBQ3pFLENBQUM7b0JBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztnQkFFTCxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ2YsS0FBSyxFQUFFO3dCQUNMLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVO3dCQUMxQixHQUFHLEVBQUUsR0FBRyxFQUFFOzRCQUNSLFVBQVU7d0JBQ1osQ0FBQztxQkFDSztpQkFDVCxDQUFDLENBQUM7Z0JBRUgsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsQ0FBQztvQkFBUyxDQUFDO2dCQUNULGtDQUFrQztnQkFDbEMsT0FBUSxNQUFjLENBQUMsTUFBTSxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtDQUFrQyxFQUFFO1FBQzNDLE1BQU0sSUFBSSxHQUFHLDJCQUEyQixDQUFDO1FBRXpDLHNFQUFzRTtRQUN0RSxTQUFTLFlBQVksQ0FBQyxZQUF3QyxFQUFFO1lBSzlELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0MsTUFBTSxRQUFRLEdBQXNCO2dCQUNsQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDakcsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxJQUFJO29CQUNiLFlBQVksRUFBRSxNQUFNO29CQUNwQixnQkFBZ0IsRUFBRSxFQUFFO29CQUNwQiwwQkFBMEIsRUFBRSxJQUFJO29CQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2lCQUM3QixDQUFDO2dCQUNGLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDakQsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFVBQVUsRUFBRSxjQUFjO2dCQUMxQixHQUFHLFNBQVM7YUFDYixDQUFDO1lBQ0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUVELFNBQVMsQ0FBQztZQUNSLGNBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7Z0JBQ3ZFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUUvRixJQUFBLGNBQUksRUFBQyxJQUFJLENBQUM7cUJBQ1AsSUFBSSxDQUFDLHNCQUFzQixDQUFDO3FCQUM1QixLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNWLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTtvQkFDdEMsWUFBWSxFQUFFLGtCQUFrQjtpQkFDakMsQ0FBQyxDQUFDO2dCQUVMLE1BQU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFFaEYsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSztnQkFDbkUsb0VBQW9FO2dCQUNwRSx3RUFBd0U7Z0JBQ3hFLG9FQUFvRTtnQkFDcEUsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO29CQUNoQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDMUMsNEVBQTRFO3dCQUM1RSxNQUFNLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDbEIsQ0FBQyxDQUFDO29CQUNGLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7d0JBQ2xGLENBQUM7d0JBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQ3BFLENBQUMsQ0FBQztpQkFDSCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRS9GLElBQUEsY0FBSSxFQUFDLElBQUksQ0FBQztxQkFDUCxJQUFJLENBQUMsc0JBQXNCLENBQUM7cUJBQzVCLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO29CQUN0QyxZQUFZLEVBQUUsWUFBWTtpQkFDM0IsQ0FBQyxDQUFDO2dCQUNMLHlFQUF5RTtnQkFDekUsa0VBQWtFO2dCQUNsRSxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUM7cUJBQ1AsR0FBRyxDQUFDLHVCQUF1QixDQUFDO3FCQUM1QixLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNWLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUU7aUJBQ3RDLENBQUMsQ0FBQztnQkFFTCxNQUFNLEtBQUssQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxTQUFTO29CQUNuQixrQkFBa0IsRUFBRSxJQUFJO2lCQUN6QixDQUFDLENBQUM7Z0JBRUgsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNsQyxFQUFFLEVBQUUsZUFBZTtnQkFDbkIsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFFBQVEsRUFBRTtvQkFDUixpQkFBaUIsRUFBRSxXQUFXO29CQUM5QixjQUFjLEVBQUUsYUFBYTtvQkFDN0IsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLFVBQVUsRUFBRSxpQkFBaUI7aUJBQzlCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7Z0JBQ3ZFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUUvRixJQUFBLGNBQUksRUFBQyxJQUFJLENBQUM7cUJBQ1AsSUFBSSxDQUFDLHNCQUFzQixDQUFDO3FCQUM1QixLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNWLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTtvQkFDdEMsWUFBWSxFQUFFLGlCQUFpQjtpQkFDaEMsQ0FBQyxDQUFDO2dCQUVMLE1BQU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUVsRCxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNqRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRTtZQUN2QixFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztnQkFDNUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRS9GLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxLQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBRW5ELE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUV6QixDQUFFLEtBQWEsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUs7Z0JBQzFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztvQkFDekIsR0FBRyxFQUFFLFFBQVE7b0JBQ2IsYUFBYSxFQUFFLElBQUk7b0JBQ25CLGdCQUFnQixFQUFFLFFBQVE7b0JBQzFCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixZQUFZLEVBQUUsZUFBZTtpQkFDOUIsQ0FBQyxDQUFDO2dCQUNGLEtBQWEsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUM7Z0JBRW5ELElBQUEsY0FBSSxFQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUN6QyxZQUFZLEVBQUUsYUFBYTtvQkFDM0IsYUFBYSxFQUFFLG1CQUFtQjtpQkFDbkMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUUzQixZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtZQUNyQyxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztnQkFDdEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO29CQUN6QixHQUFHLEVBQUUsUUFBUTtvQkFDYixhQUFhLEVBQUUsSUFBSTtvQkFDbkIsZ0JBQWdCLEVBQUUsUUFBUTtvQkFDMUIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFlBQVksRUFBRSxlQUFlO2lCQUM5QixDQUFDLENBQUM7Z0JBRUgsSUFBQSxjQUFJLEVBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3pDLFlBQVksRUFBRSxrQkFBa0I7b0JBQ2hDLGFBQWEsRUFBRSxlQUFlO2lCQUMvQixDQUFDLENBQUM7Z0JBQ0gsbUVBQW1FO2dCQUNuRSxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUM7cUJBQ1AsR0FBRyxDQUFDLGlCQUFpQixDQUFDO3FCQUN0QixLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNWLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTtpQkFDdkMsQ0FBQyxDQUFDO2dCQUVMLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBRW5FLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsNEJBQTRCLEVBQUU7WUFDckMsRUFBRSxDQUFDLHlIQUF5SCxFQUFFO2dCQUM1SCxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO2dCQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFFL0YsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBRW5FLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxzR0FBc0csRUFBRTtnQkFDekcsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRTlGLEtBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFFM0YsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM5QixFQUFFLENBQUMsMEVBQTBFLEVBQUUsS0FBSztZQUNsRixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7Z0JBQzFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRTthQUNuRCxDQUFDLENBQUM7WUFFSCxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSztZQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsZ0RBQWdEO1lBQy9DLG1CQUFnQixDQUFDLFVBQVUsR0FBSSxtQkFBZ0IsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQ2pFLG1CQUFnQixDQUFDLGdCQUFnQixHQUFJLG1CQUFnQixDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztZQUM3RSxtQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDcEUsbUJBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsdUJBQXVCO1lBRW5HLE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBSSxFQUFDLDJCQUEyQixDQUFDO2lCQUM1QyxHQUFHLENBQUMsMEJBQTBCLENBQUM7aUJBQy9CLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO2FBQzdELENBQUMsQ0FBQztZQUVMLE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRS9DLGtEQUFrRDtZQUNsRCxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFELFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFdkQsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFaEMsY0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2FBQzNDLENBQUMsQ0FBQztZQUVILCtDQUErQztZQUMvQyxNQUFNLGVBQWUsR0FBRyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDeEYsbUJBQWdCLENBQUMsVUFBVSxHQUFJLG1CQUFnQixDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDakUsbUJBQWdCLENBQUMsZ0JBQWdCLEdBQUksbUJBQWdCLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQzdFLG1CQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDeEQsbUJBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7WUFFaEgsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFJLEVBQUMsMkJBQTJCLENBQUM7aUJBQzVDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztpQkFDL0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFeEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFL0MscUNBQXFDO1lBQ3JDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRTVDLCtEQUErRDtZQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVqQyxjQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSztZQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLGFBQWEsRUFBRSwyQkFBMkI7YUFDM0MsQ0FBQyxDQUFDO1lBRUgseUNBQXlDO1lBQ3pDLE1BQU0sZUFBZSxHQUFHLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDekQsbUJBQWdCLENBQUMsVUFBVSxHQUFJLG1CQUFnQixDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDakUsbUJBQWdCLENBQUMsZ0JBQWdCLEdBQUksbUJBQWdCLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQzdFLG1CQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDeEQsbUJBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBRXpELE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBSSxFQUFDLDJCQUEyQixDQUFDO2lCQUM1QyxHQUFHLENBQUMsMEJBQTBCLENBQUM7aUJBQy9CLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXhELE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRS9DLHFDQUFxQztZQUNyQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUU1QyxxRkFBcUY7WUFDckYsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsY0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDM0IsSUFBSSxLQUFlLENBQUM7UUFFcEIsTUFBTSxDQUFDO1lBQ0wsS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsR0FBRyxDQUNWLFNBQWlDLEVBQ2pDLFdBQW1DLEVBQ25DLGlCQUF5QjtZQUV6QixPQUFRLEtBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELEVBQUUsQ0FBQyxtREFBbUQsRUFBRTtZQUN0RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFO1lBQ3JFLHFGQUFxRjtZQUNyRixNQUFNLFNBQVMsR0FBRyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDM0UsTUFBTSxXQUFXLEdBQUcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUU7WUFDckUsa0ZBQWtGO1lBQ2xGLE1BQU0sU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsa0VBQWtFO1lBQ2xFLE1BQU0sU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUU7WUFDL0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFO1lBQzFELHFGQUFxRjtZQUNyRiwwQkFBMEI7WUFDMUIscURBQXFEO1lBQ3JELGtGQUFrRjtZQUNsRixxQ0FBcUM7WUFDckMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25GLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQiwrRUFBK0U7WUFDL0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUUsQ0FBQztZQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlDQUF5QyxFQUFFO1FBQ2xELE1BQU0sSUFBSSxHQUFHLDJCQUEyQixDQUFDO1FBQ3pDLElBQUksS0FBZSxDQUFDO1FBRXBCLFVBQVUsQ0FBQztZQUNULE1BQU0sUUFBUSxHQUFzQjtnQkFDbEMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQzFHLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUNwQyxPQUFPLEVBQUUsSUFBSTtvQkFDYixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsZ0JBQWdCLEVBQUUsRUFBRTtvQkFDcEIsMEJBQTBCLEVBQUUsSUFBSTtvQkFDaEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtpQkFDN0IsQ0FBQztnQkFDRixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQ2pELFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUNqQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTthQUNwQyxDQUFDO1lBQ0YsS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDO1lBQ1IsY0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssVUFBVSxVQUFVLENBQ3ZCLFNBQWlDLEVBQ2pDLFdBQW1DLEVBQ25DLGNBQXNCLEVBQ3RCLFVBQVUsR0FBRyxDQUFDO1lBRWQsT0FBUSxLQUFhLENBQUMsdUNBQXVDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEgsQ0FBQztRQUVELEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLO1lBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBSSxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsTUFBTSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUs7WUFDaEUsMkVBQTJFO1lBQzNFLE1BQU0sU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSztZQUNuRSxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUNqRixJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELG1CQUFtQjtZQUNuQixNQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7WUFDdkUsSUFBQSxjQUFJLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLElBQUksV0FBOEIsQ0FBQztZQUNuQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxXQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxLQUFLO1lBQ3RGLElBQUEsY0FBSSxFQUFDLElBQUksQ0FBQztpQkFDUCxHQUFHLENBQUMsd0JBQXdCLENBQUM7aUJBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ1IsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlELElBQUksV0FBOEIsQ0FBQztZQUNuQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxXQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLDJCQUEyQixDQUFDO1FBQ3pDLElBQUksS0FBZSxDQUFDO1FBQ3BCLElBQUksT0FBMkIsQ0FBQztRQUVoQyxVQUFVLENBQUM7WUFDVCxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRWhDLE1BQU0sUUFBUSxHQUFzQjtnQkFDbEMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQzVHLGNBQWMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUN0QyxPQUFPLEVBQUUsSUFBSTtvQkFDYixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsZ0JBQWdCLEVBQUUsRUFBRTtvQkFDcEIsMEJBQTBCLEVBQUUsSUFBSTtvQkFDaEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtpQkFDN0IsQ0FBQztnQkFDRixhQUFhLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQ25ELFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUNuQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTthQUN0QyxDQUFDO1lBRUYsS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLEtBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUV0RCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVyRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3ZDLGNBQWMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUM5RSxDQUFDLENBQUM7WUFFVixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixjQUFjLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztpQkFDM0QsQ0FBQzthQUNJLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDO1lBQ1IsY0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvR0FBb0csRUFBRSxLQUFLO1lBQzVHLElBQUEsY0FBSSxFQUFDLElBQUksQ0FBQztpQkFDUCxHQUFHLENBQUMsd0NBQXdDLENBQUM7aUJBQzdDLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUVwRSxNQUFNLGFBQWEsR0FBRyxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTlFLE1BQU0sZUFBZSxHQUFHLElBQUEsY0FBSSxFQUFDLElBQUksQ0FBQztpQkFDL0IsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUN6RixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFM0UsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0ZBQWtGLEVBQUUsS0FBSztZQUMxRixJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFbEgsTUFBTSxXQUFXLEdBQUcsSUFBQSxjQUFJLEVBQUMsSUFBSSxDQUFDO2lCQUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUMzRixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFM0UsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFFbEgsTUFBTSxXQUFXLEdBQUcsSUFBQSxjQUFJLEVBQUMsSUFBSSxDQUFDO2lCQUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUMzRixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFM0UsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzREFBc0QsRUFBRTtRQUMvRCxNQUFNLElBQUksR0FBRyw0QkFBNEIsQ0FBQztRQUMxQyxJQUFJLEtBQWUsQ0FBQztRQUVwQixVQUFVLENBQUM7WUFDVCxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUM7WUFDUixjQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUs7WUFDckQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDekQsSUFBQSxjQUFJLEVBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFbEYsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXZELE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN6RCxJQUFBLGNBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUVsRixNQUFNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVwRCxNQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0RBQWdELEVBQUU7UUFDekQsSUFBSSxLQUFlLENBQUM7UUFFcEIsVUFBVSxDQUFDO1lBQ1QsS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDO1lBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLEtBQUs7WUFDdEUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXhDLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLFNBQVM7Z0JBQ1QsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osaUJBQWlCLEVBQUUsQ0FBQzthQUNyQixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDOUUsS0FBSyxNQUFNLElBQUksSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLO1lBQzFELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRXpELE1BQU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7Z0JBQ3pCLENBQUMsRUFBRSxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELEtBQUssTUFBTSxJQUFJLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJy4uLy4uL3NyYy9iaXRnb0FQSSc7XG5pbXBvcnQgeyBQcm94eUFnZW50IH0gZnJvbSAncHJveHktYWdlbnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgdHlwZSB7IElIbWFjQXV0aFN0cmF0ZWd5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWhtYWMnO1xuXG5kZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGVuYWJsZWQgZXhwbGljaXRseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICBjb29raWVzUHJvcGFnYXRpb25FbmFibGVkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkJyk7XG4gICAgICBiaXRnby5jb29raWVzUHJvcGFnYXRpb25FbmFibGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGRpc2FibGVkIGV4cGxpY2l0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQnKTtcbiAgICAgIGJpdGdvLmNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCcpO1xuICAgICAgYml0Z28uY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZC5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVxdWVzdElkUHJlZml4IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXBlbmQgcmVxdWVzdElkUHJlZml4IHRvIFJlcXVlc3QtSUQgaGVhZGVyIHdoZW4gc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJ3Rlc3QtcHJlZml4LScsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgL150ZXN0LXByZWZpeC0vKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICcxMjM0NScsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBSZXF1ZXN0LUlEIGhlYWRlciB3aGVuIHJlcXVlc3RJZFByZWZpeCBpcyBub3Qgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgL14xMjM0NSQvKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICcxMjM0NScsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZvcm1hdCBSZXF1ZXN0LUlEIHdpdGggcHJlZml4IGFuZCBudW1lcmljIHNlcXVlbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJ215YXBwLXYxLScsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgJ215YXBwLXYxLXRyYWNlLTEyMycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ3RyYWNlLTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGVtcHR5IHN0cmluZyBwcmVmaXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgcmVxdWVzdElkUHJlZml4OiAnJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1JlcXVlc3QtSUQnLCAnYWJjLTEyMycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ2FiYy0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnaHR0cCBwcm94eSBhZ2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnaHR0cCBwcm94eSBhZ2VudCBzaGFsbCBiZSBjcmVhdGVkIHdoZW4gcHJveHkoY3VzdG9tUHJveHlhZ2VudCkgaXMgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9tUHJveHlBZ2VudCA9IG5ldyBQcm94eUFnZW50KHtcbiAgICAgICAgZ2V0UHJveHlGb3JVcmw6ICgpID0+ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY3VzdG9tUHJveHlBZ2VudCxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2N1c3RvbVByb3h5QWdlbnQnLCBjdXN0b21Qcm94eUFnZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdiaXRnbyBhcGkgaXMgc3RpbGwgaW5pdGlhdGVkIHdoZW4gcHJveHkoY3VzdG9tUHJveHlBZ2VudCkgaXMgbm90IHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdfY3VzdG9tUHJveHlBZ2VudCcsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGJhc2U1OCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJzJONnBhVDJUVTROMVhwYVpqSmlBcFdKWG9leXJMM1VXcGtaJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgYmVjaDMyIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvXG4gICAgICAgIC52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJ3RiMXFndXp5azR3NmthcXRwc2N6czVhajB3OHI3NTk4anEzNmVnbThlOTh3cXBoM3J3bWV4NjhzZXNsZ3NnJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VybCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBVUkwgZm9yIHZlcnNpb24gMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YxL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCwgMSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IFVSTCBmb3IgdmVyc2lvbiAyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoLCAyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgVVJMIGZvciB2ZXJzaW9uIDMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92My90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgsIDMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gdmVyc2lvbiAxIGlmIG5vIHZlcnNpb24gaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92MS90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNyeXB0S2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgbm8gcGFyYW1zIGFyZSBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IGNhbGxpbmcgd2l0aCBubyBwYXJhbXMgZm9yIHRlc3RcbiAgICAgICgoKSA9PiBiaXRnby5kZWNyeXB0S2V5cygpKS5zaG91bGQudGhyb3coJ01pc3NpbmcgcGFyYW1ldGVyOiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1cbiAgICAgICgoKSA9PiBiaXRnby5kZWNyeXB0S2V5cyh7IHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pKS5zaG91bGQudGhyb3coXG4gICAgICAgICdNaXNzaW5nIHBhcmFtZXRlcjogd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycydcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHBhc3N3b3JkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtXG4gICAgICAoKCkgPT4gYml0Z28uZGVjcnlwdEtleXMoeyB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXSB9KSkuc2hvdWxkLnRocm93KCdNaXNzaW5nIHBhcmFtZXRlcjogcGFzc3dvcmQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBpcyBub3QgYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgKCgpID0+IGJpdGdvLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogJ25vdCBhbiBhcnJheScsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pKS5zaG91bGQudGhyb3coXG4gICAgICAgICd3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzIG11c3QgYmUgYW4gYXJyYXknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgYXJyYXkgZm9yIGVtcHR5IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtdLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IHdhbGxldElkIGlzIG1pc3Npbmcgb3Igbm90IGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHdhbGxldElkXG4gICAgICAgICAgICB7IGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIHdhbGxldElkJyk7XG5cbiAgICAgICgoKSA9PlxuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6IDEyMywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgd2FsbGV0SWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IGVuY3J5cHRlZFBydiBpcyBtaXNzaW5nIG9yIG5vdCBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PlxuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyBlbmNyeXB0ZWRQcnZcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyBlbmNyeXB0ZWRQcnYnKTtcblxuICAgICAgKCgpID0+XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJywgZW5jcnlwdGVkUHJ2OiAxMjMgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyBlbmNyeXB0ZWRQcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHdhbGxldElkcyBvZiBrZXlzIHRoYXQgZmFpbGVkIHRvIGRlY3J5cHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZWNyeXB0U3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0Jyk7XG4gICAgICBkZWNyeXB0U3R1Yi5vbkZpcnN0Q2FsbCgpLnJldHVybnMoJ2RlY3J5cHRlZC1rZXktMScpO1xuICAgICAgZGVjcnlwdFN0dWIub25TZWNvbmRDYWxsKCkudGhyb3dzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTEnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0yJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHJlc3VsdFswXS5zaG91bGQuZXF1YWwoJ3dhbGxldC1pZC0yJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBwcm9jZXNzIG11bHRpcGxlIHdhbGxldCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdCcpO1xuICAgICAgZGVjcnlwdFN0dWJcbiAgICAgICAgLndpdGhBcmdzKHsgaW5wdXQ6ICdlbmNyeXB0ZWQtZGF0YS0yJywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdFN0dWJcbiAgICAgICAgLndpdGhBcmdzKHsgaW5wdXQ6ICdlbmNyeXB0ZWQtZGF0YS00JywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdFN0dWIucmV0dXJucygnc3VjY2VzcycpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0zJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMycgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTQnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS00JyB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBkZWNyeXB0U3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuY29udGFpbkRlZXAoWyd3YWxsZXQtaWQtMicsICd3YWxsZXQtaWQtNCddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY3J5cHRLZXlzQXN5bmMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB3YWxsZXRJZHMgb2Yga2V5cyB0aGF0IGZhaWxlZCB0byBkZWNyeXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjcnlwdEFzeW5jU3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0QXN5bmMnKTtcbiAgICAgIGRlY3J5cHRBc3luY1N0dWIub25GaXJzdENhbGwoKS5yZXNvbHZlcygnZGVjcnlwdGVkLWtleS0xJyk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViLm9uU2Vjb25kQ2FsbCgpLnJlamVjdHMobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uZGVjcnlwdEtleXNBc3luYyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICByZXN1bHRbMF0uc2hvdWxkLmVxdWFsKCd3YWxsZXQtaWQtMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgcHJvY2VzcyBtdWx0aXBsZSB3YWxsZXQga2V5cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY3J5cHRBc3luY1N0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdEFzeW5jJyk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViXG4gICAgICAgIC53aXRoQXJncyh7IGlucHV0OiAnZW5jcnlwdGVkLWRhdGEtMicsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViXG4gICAgICAgIC53aXRoQXJncyh7IGlucHV0OiAnZW5jcnlwdGVkLWRhdGEtNCcsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViLnJlc29sdmVzKCdzdWNjZXNzJyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzQXN5bmMoe1xuICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMScgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTInLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0yJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMycsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTMnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC00JywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtNCcgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICB9KTtcblxuICAgICAgZGVjcnlwdEFzeW5jU3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuY29udGFpbkRlZXAoWyd3YWxsZXQtaWQtMicsICd3YWxsZXQtaWQtNCddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1VzZXItQWdlbnQgaGVhZGVyIGJhc2VkIG9uIGVudmlyb25tZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHJ1bm5pbmcgaW4gTm9kZS5qcyAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICB1c2VyQWdlbnQ6ICdUZXN0QWdlbnQvMS4wJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBFbnN1cmUgd2UncmUgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50IGJ5IHZlcmlmeWluZyB3aW5kb3cgaXMgdW5kZWZpbmVkXG4gICAgICAodHlwZW9mIHdpbmRvdykuc2hvdWxkLmVxdWFsKCd1bmRlZmluZWQnKTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdVc2VyLUFnZW50JywgJ1Rlc3RBZ2VudC8xLjAnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICd0ZXN0LTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNldCBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHJ1bm5pbmcgaW4gYnJvd3NlciAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1vY2sgdGhlIHdpbmRvdyBvYmplY3QgdG8gc2ltdWxhdGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICAgICAgY29uc3Qgd2luZG93U3R1YiA9IHsgbG9jYXRpb246ICdtb2NrJyB9O1xuICAgICAgKGdsb2JhbCBhcyBhbnkpLndpbmRvdyA9IHdpbmRvd1N0dWI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgICB1c2VyQWdlbnQ6ICdUZXN0QWdlbnQvMS4wJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAgIC5yZXBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBWZXJpZnkgVXNlci1BZ2VudCBoZWFkZXIgaXMgTk9UIHNldCB0byBvdXIgY3VzdG9tIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB1c2VyQWdlbnQgPSB0aGlzLnJlcS5oZWFkZXJzWyd1c2VyLWFnZW50J107XG4gICAgICAgICAgICBpZiAodXNlckFnZW50ICYmIHVzZXJBZ2VudC5pbmNsdWRlcygnVGVzdEFnZW50LzEuMCcpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlci1BZ2VudCBzaG91bGQgbm90IGJlIHNldCBpbiBicm93c2VyIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWzIwMCwgeyBzdGF0dXM6ICdvaycgfV07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAndGVzdC0xMjMnLFxuICAgICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZ2xvYmFsIHdpbmRvdyBtb2NrXG4gICAgICAgIGRlbGV0ZSAoZ2xvYmFsIGFzIGFueSkud2luZG93O1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaG1hY0F1dGhTdHJhdGVneSB0b2tlbiBsaWZlY3ljbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcblxuICAgIC8vIEJ1aWxkcyBhIG1vY2sgc3RyYXRlZ3kgd2hvc2Ugc2V0VG9rZW4gLyBjbGVhclRva2VuIGFyZSBzaW5vbiBzdHVicy5cbiAgICBmdW5jdGlvbiBtYWtlU3RyYXRlZ3kob3ZlcnJpZGVzOiBQYXJ0aWFsPElIbWFjQXV0aFN0cmF0ZWd5PiA9IHt9KToge1xuICAgICAgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5O1xuICAgICAgc2V0VG9rZW5TdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICBjbGVhclRva2VuU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgIH0ge1xuICAgICAgY29uc3Qgc2V0VG9rZW5TdHViID0gc2lub24uc3R1YigpLnJlc29sdmVzKCk7XG4gICAgICBjb25zdCBjbGVhclRva2VuU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpO1xuICAgICAgY29uc3Qgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5ID0ge1xuICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaG1hYzogJ2htYWMnLCB0aW1lc3RhbXA6IDEsIHRva2VuSGFzaDogJ2hhc2gnIH0pLFxuICAgICAgICB2ZXJpZnlSZXNwb25zZTogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2hhc2hlZC1wdycpLFxuICAgICAgICBzZXRUb2tlbjogc2V0VG9rZW5TdHViLFxuICAgICAgICBjbGVhclRva2VuOiBjbGVhclRva2VuU3R1YixcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIsIGNsZWFyVG9rZW5TdHViIH07XG4gICAgfVxuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhdXRoZW50aWNhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAucG9zdCgnL2FwaS9hdXRoL3YxL3Nlc3Npb24nKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4bXlhY2Nlc3N0b2tlbicsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlKHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJywgcGFzc3dvcmQ6ICdodW50ZXIyJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZXRUb2tlblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKCd2MnhteWFjY2Vzc3Rva2VuJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2F3YWl0cyBzZXRUb2tlbiBiZWZvcmUgbWFraW5nIGVuc3VyZUVjZGhLZXljaGFpbiByZXF1ZXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3Q6IGlmIHNldFRva2VuIGlzIG5vdCBhd2FpdGVkLCB0aGVcbiAgICAgICAgLy8gc3RyYXRlZ3kncyBrZXkgbWF0ZXJpYWwgd29uJ3QgYmUgcmVhZHkgYmVmb3JlIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzXG4gICAgICAgIC8vIGlzIGNhbGxlZCBmb3IgdGhlIEdFVCAvdXNlci9zZXR0aW5ncyByZXF1ZXN0LCBhbmQgaXQgd291bGQgdGhyb3cuXG4gICAgICAgIGxldCBrZXlSZWFkeSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5IH0gPSBtYWtlU3RyYXRlZ3koe1xuICAgICAgICAgIHNldFRva2VuOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNpbXVsYXRlIG5vbi10cml2aWFsIGFzeW5jIGtleSBkZXJpdmF0aW9uIChsaWtlIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KS5cbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgICAgICAgICAga2V5UmVhZHkgPSB0cnVlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICgha2V5UmVhZHkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0b2tlbiBhdmFpbGFibGUuIENhbGwgc2V0VG9rZW4oKSBvciByZXN0b3JlVG9rZW4oKSBmaXJzdC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvYXV0aC92MS9zZXNzaW9uJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeG15dG9rZW4nLFxuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUaGUgR0VUIC91c2VyL3NldHRpbmdzIHJlcXVlc3QgbWFkZSBieSBlbnN1cmVVc2VyRWNkaEtleWNoYWluSXNDcmVhdGVkXG4gICAgICAgIC8vIG11c3Qgc3VjY2VlZCDigJQgaXQgd291bGQgdGhyb3cgaWYgc2V0VG9rZW4gd2Fzbid0IGF3YWl0ZWQgZmlyc3QuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3VzZXIvc2V0dGluZ3MnKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHNldHRpbmdzOiB7IGVjZGhLZXljaGFpbjogJ3hwdWIxMjMnIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlKHtcbiAgICAgICAgICB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nLFxuICAgICAgICAgIHBhc3N3b3JkOiAnaHVudGVyMicsXG4gICAgICAgICAgZW5zdXJlRWNkaEtleWNoYWluOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBrZXlSZWFkeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXV0aGVudGljYXRlV2l0aFBhc3NrZXkoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkUGFzc2tleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6ICdjcmVkZW50aWFsLWlkJyxcbiAgICAgICAgcmF3SWQ6ICdyYXctaWQnLFxuICAgICAgICB0eXBlOiAncHVibGljLWtleScsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgYXV0aGVudGljYXRvckRhdGE6ICdhdXRoLWRhdGEnLFxuICAgICAgICAgIGNsaWVudERhdGFKU09OOiAnY2xpZW50LWRhdGEnLFxuICAgICAgICAgIHNpZ25hdHVyZTogJ3NpZycsXG4gICAgICAgICAgdXNlckhhbmRsZTogJ3VzZXItaGFuZGxlLTEyMycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL2F1dGgvdjEvc2Vzc2lvbicpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhwYXNza2V5dG9rZW4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhQYXNza2V5KHZhbGlkUGFzc2tleSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4cGFzc2tleXRva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjbGVhckFzeW5jKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2xlYXJzIF90b2tlbiBhbmQgY2FsbHMgY2xlYXJUb2tlbiBvbiB0aGUgc3RyYXRlZ3knLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIGNsZWFyVG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHNvbWV0b2tlbicgfSk7XG4gICAgICAgIChiaXRnbyBhcyBhbnkpLl90b2tlbi5zaG91bGQuZXF1YWwoJ3YyeHNvbWV0b2tlbicpO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmNsZWFyQXN5bmMoKTtcblxuICAgICAgICAoKGJpdGdvIGFzIGFueSkuX3Rva2VuID09PSB1bmRlZmluZWQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGNsZWFyVG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3JlZnJlc2hUb2tlbigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIG5ldyBhY2Nlc3NfdG9rZW4gZnJvbSB0aGUgT0F1dGggcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6IFJPT1QsXG4gICAgICAgICAgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgY2xpZW50SWQ6ICdjbGllbnQtaWQnLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogJ2NsaWVudC1zZWNyZXQnLFxuICAgICAgICB9KTtcbiAgICAgICAgKGJpdGdvIGFzIGFueSkuX3JlZnJlc2hUb2tlbiA9ICdvbGQtcmVmcmVzaC10b2tlbic7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvb2F1dGgvdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhuZXd0b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJ25ldy1yZWZyZXNoLXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28ucmVmcmVzaFRva2VuKCk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4bmV3dG9rZW4nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2F1dGhlbnRpY2F0ZVdpdGhBdXRoQ29kZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiBmcm9tIHRoZSBPQXV0aCByZXNwb25zZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgICAgY3VzdG9tUm9vdFVSSTogUk9PVCxcbiAgICAgICAgICBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICBjbGllbnRJZDogJ2NsaWVudC1pZCcsXG4gICAgICAgICAgY2xpZW50U2VjcmV0OiAnY2xpZW50LXNlY3JldCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL29hdXRoL3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4YXV0aGNvZGV0b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJ3JlZnJlc2gtdG9rZW4nLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXV0aGVudGljYXRlV2l0aEF1dGhDb2RlIGNhbGxzIHRoaXMubWUoKSBhZnRlciBzZXR0aW5nIHRoZSB0b2tlblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS91c2VyL21lJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGVXaXRoQXV0aENvZGUoeyBhdXRoQ29kZTogJ215LWF1dGgtY29kZScgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4YXV0aGNvZGV0b2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc3luYyB0b2tlbi1zZXR0aW5nIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuIGRvZXMgbm90IGNhbGwgc2V0VG9rZW4gKHN5bmNocm9ub3VzIOKAlCBjYWxsZXIgbXVzdCBpbnZva2Ugc2V0VG9rZW4gb24gdGhlIHN0cmF0ZWd5IG1hbnVhbGx5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHN5bmN0b2tlbicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZnJvbUpTT04gZG9lcyBub3QgY2FsbCBzZXRUb2tlbiAoc3luY2hyb25vdXMg4oCUIGNhbGxlciBtdXN0IGludm9rZSBzZXRUb2tlbiBvbiB0aGUgc3RyYXRlZ3kgbWFudWFsbHkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIChiaXRnbyBhcyBhbnkpLmZyb21KU09OKHsgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sIHRva2VuOiAndjJ4anNvbnRva2VuJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb25zdGFudHMgcGFyYW1ldGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWxsb3cgcGFzc2luZyBjb25zdGFudHMgdmlhIG9wdGlvbnMgYW5kIGV4cG9zZSB2aWEgZmV0Y2hDb25zdGFudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY2xpZW50Q29uc3RhbnRzOiB7IG1heEZlZVJhdGU6ICcxMjMxMjMxMjMxMjMxMjMnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUmF0ZScsICcxMjMxMjMxMjMxMjMxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVmcmVzaCBjb25zdGFudHMgd2hlbiBjYWNoZSBoYXMgZXhwaXJlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBjYWNoZWQgY29uc3RhbnRzIHdpdGggYW4gZXhwaXJlZCBjYWNoZVxuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNbJ2N1c3RvbSddID0geyBtYXhGZWVSYXRlOiAnb2xkLXZhbHVlJyB9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZVsnY3VzdG9tJ10gPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCk7IC8vIEV4cGlyZWQgMSBzZWNvbmQgYWdvXG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb25zdGFudHM6IHsgbWF4RmVlUmF0ZTogJ25ldy12YWx1ZScsIG5ld0NvbnN0YW50OiAnYWRkZWQnIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuXG4gICAgICAvLyBTaG91bGQgcmV0dXJuIHRoZSBuZXcgY29uc3RhbnRzIGZyb20gdGhlIHNlcnZlclxuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhGZWVSYXRlJywgJ25ldy12YWx1ZScpO1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCduZXdDb25zdGFudCcsICdhZGRlZCcpO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjYWNoZWQgY29uc3RhbnRzIHdoZW4gY2FjaGUgaXMgc3RpbGwgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgY2FjaGVkIGNvbnN0YW50cyB3aXRoIGEgZnV0dXJlIGV4cGlyeVxuICAgICAgY29uc3QgY2FjaGVkQ29uc3RhbnRzID0geyBtYXhGZWVSYXRlOiAnY2FjaGVkLXZhbHVlJywgYW5vdGhlclNldHRpbmc6ICdjYWNoZWQtc2V0dGluZycgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IGNhY2hlZENvbnN0YW50cztcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDApOyAvLyBWYWxpZCBmb3IgNSBtb3JlIG1pbnV0ZXNcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBjb25zdGFudHM6IHsgc2hvdWxkTm90QmVVc2VkOiB0cnVlIH0gfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG5cbiAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIGNhY2hlZCBjb25zdGFudHNcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuZGVlcEVxdWFsKGNhY2hlZENvbnN0YW50cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIEhUVFAgcmVxdWVzdCB3YXMgbWFkZSAoc2luY2UgY2FjaGUgd2FzIHZhbGlkKVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGNhY2hlZCBjb25zdGFudHMgd2hlbiBubyBjYWNoZSBleHBpcnkgaXMgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIGNhY2hlZCBjb25zdGFudHMgd2l0aCBubyBleHBpcnlcbiAgICAgIGNvbnN0IGNhY2hlZENvbnN0YW50cyA9IHsgbWF4RmVlUmF0ZTogJ25vLWV4cGlyeS12YWx1ZScgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IGNhY2hlZENvbnN0YW50cztcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGNvbnN0YW50czogeyBzaG91bGROb3RCZVVzZWQ6IHRydWUgfSB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiB0aGUgY2FjaGVkIGNvbnN0YW50c1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5kZWVwRXF1YWwoY2FjaGVkQ29uc3RhbnRzKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgbm8gSFRUUCByZXF1ZXN0IHdhcyBtYWRlIChzaW5jZSBubyBleHBpcnkgbWVhbnMgY2FjaGUgaXMgYWx3YXlzIHZhbGlkKVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3BhY2tLZXljaGFpbnNGRkQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGZmZChcbiAgICAgIGtleWNoYWluczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIHYyS2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgbWF4QmF0Y2hTaXplQnl0ZXM6IG51bWJlclxuICAgICk6IEFycmF5PHsgdjFCYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgdjJCYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgc2l6ZUJ5dGVzOiBudW1iZXIgfT4ge1xuICAgICAgcmV0dXJuIChiaXRnbyBhcyBhbnkpLnBhY2tLZXljaGFpbnNGRkQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgbWF4QmF0Y2hTaXplQnl0ZXMpO1xuICAgIH1cblxuICAgIGl0KCdyZXR1cm5zIGFuIGVtcHR5IGFycmF5IHdoZW4gYm90aCBpbnB1dHMgYXJlIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmlucyA9IGZmZCh7fSwge30sIDEwMjQpO1xuICAgICAgYmlucy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3BhY2tzIGFsbCBpdGVtcyBpbnRvIGEgc2luZ2xlIGJpbiB3aGVuIHRoZXkgZml0IHdpdGhpbiB0aGUgbGltaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBFYWNoIGVudHJ5OiAyLWJ5dGUgaWQgKyAxMC1ieXRlIHZhbHVlID0gMTIgYnl0ZXM7IDUgZW50cmllcyA9IDYwIGJ5dGVzIDwgMjAwIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAnYWFhYWFhYWFhYScsIGsyOiAnYmJiYmJiYmJiYicsIGszOiAnY2NjY2NjY2NjYycgfTtcbiAgICAgIGNvbnN0IHYyS2V5Y2hhaW5zID0geyB2MTogJ2RkZGRkZGRkZGQnLCB2MjogJ2VlZWVlZWVlZWUnIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywgdjJLZXljaGFpbnMsIDIwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIE9iamVjdC5rZXlzKGJpbnNbMF0udjFCYXRjaCkuc2hvdWxkLmhhdmUubGVuZ3RoKDMpO1xuICAgICAgT2JqZWN0LmtleXMoYmluc1swXS52MkJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc3BsaXRzIGludG8gbXVsdGlwbGUgYmlucyB3aGVuIGEgc2luZ2xlIGJpbiBjYW5ub3QgZml0IGFsbCBpdGVtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlkPSdrMScgKDIgYnl0ZXMpICsgNjAwLWNoYXIgdmFsdWUgPSA2MDIgYnl0ZXM7IDIgZW50cmllcyBleGNlZWQgNzAwLWJ5dGUgbGltaXRcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd4Jy5yZXBlYXQoNjAwKSwgazI6ICd5Jy5yZXBlYXQoNjAwKSB9O1xuICAgICAgY29uc3QgYmlucyA9IGZmZChrZXljaGFpbnMsIHt9LCA3MDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYSBzaW5nbGUgaXRlbSBleGNlZWRzIG1heEJhdGNoU2l6ZUJ5dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJyAoMiBieXRlcykgKyAyMDAtY2hhciB2YWx1ZSA9IDIwMiBieXRlcyA+IDEwMC1ieXRlIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDIwMCkgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZmZChrZXljaGFpbnMsIHt9LCAxMDApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIG5vdCB0aHJvd24nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5tYXRjaCgvZXhjZWVkcyB0aGUgbWF4aW11bSBiYXRjaCBzaXplLyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncGxhY2VzIFYxIGtleWNoYWlucyBpbiB2MUJhdGNoIGFuZCBWMiBrZXljaGFpbnMgaW4gdjJCYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd2MXZhbHVlJyB9O1xuICAgICAgY29uc3QgdjJLZXljaGFpbnMgPSB7IGsyOiAndjJ2YWx1ZScgfTtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgMTAwMDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBiaW5zWzBdLnYxQmF0Y2guc2hvdWxkLmhhdmUucHJvcGVydHkoJ2sxJywgJ3YxdmFsdWUnKTtcbiAgICAgIGJpbnNbMF0udjJCYXRjaC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnazInLCAndjJ2YWx1ZScpO1xuICAgICAgYmluc1swXS52MUJhdGNoLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnazInKTtcbiAgICAgIGJpbnNbMF0udjJCYXRjaC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2sxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBGRkQgb3JkZXJpbmcgc28gdGhlIGxhcmdlc3QgaXRlbSBpcyBwYWNrZWQgZmlyc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAnYmlnJzogaWQoMykgKyA0OTcgYnl0ZXMgPSA1MDAgYnl0ZXM7ICdzMScsJ3MyJzogaWQoMikgKyA5OCBieXRlcyA9IDEwMCBieXRlcyBlYWNoXG4gICAgICAvLyBtYXhCYXRjaFNpemVCeXRlcyA9IDYwMFxuICAgICAgLy8gRkZEIG9yZGVyIChkZXNjZW5kaW5nKTogYmlnKDUwMCksIHMxKDEwMCksIHMyKDEwMClcbiAgICAgIC8vICAgYmluMDogYmlnKDUwMCkuIHMxOiA1MDArMTAwPTYwMCA8PTYwMCwgZml0cy4gczI6IDYwMCsxMDA9NzAwID4gNjAwLCBuZXcgYmluMS5cbiAgICAgIC8vICAgUmVzdWx0OiBiaW4wPXtiaWcsczF9LCBiaW4xPXtzMn1cbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgYmlnOiAneCcucmVwZWF0KDQ5NyksIHMxOiAneScucmVwZWF0KDk4KSwgczI6ICd6Jy5yZXBlYXQoOTgpIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywge30sIDYwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIC8vICdiaWcnIHNob3VsZCBzaGFyZSBpdHMgYmluIHdpdGggb25lIHNtYWxsIGl0ZW0gKEZGRCBwYWNrcyB0aGUgbGFyZ2VzdCBmaXJzdClcbiAgICAgIGNvbnN0IGJpbldpdGhCaWcgPSBiaW5zLmZpbmQoKGIpID0+ICdiaWcnIGluIGIudjFCYXRjaCkhO1xuICAgICAgT2JqZWN0LmtleXMoYmluV2l0aEJpZy52MUJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9jZXNzS2V5Y2hhaW5QYXNzd29yZFVwZGF0ZXNJbkJhdGNoZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdG9rZW5IYXNoOiAnaGFzaCcgfSksXG4gICAgICAgIHZlcmlmeVJlc3BvbnNlOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRIbWFjOiAnaG1hYycsXG4gICAgICAgICAgc2lnbmF0dXJlU3ViamVjdDogJycsXG4gICAgICAgICAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IHRydWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNhbGN1bGF0ZUhNQUM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKSxcbiAgICAgICAgY2xlYXJUb2tlbjogc2lub24uc3R1YigpLnJlc29sdmVzKCksXG4gICAgICB9O1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBydW5CYXRjaGVzKFxuICAgICAga2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgdjJLZXljaGFpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBtYXhCYXRjaFNpemVLQjogbnVtYmVyLFxuICAgICAgbWF4UmV0cmllcyA9IDNcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHJldHVybiAoYml0Z28gYXMgYW55KS5wcm9jZXNzS2V5Y2hhaW5QYXNzd29yZFVwZGF0ZXNJbkJhdGNoZXMoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgbWF4QmF0Y2hTaXplS0IsIG1heFJldHJpZXMpO1xuICAgIH1cblxuICAgIGl0KCdtYWtlcyBhIHNpbmdsZSBQVVQgcmVxdWVzdCBmb3IgYSBzbWFsbCBwYXlsb2FkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAnc21hbGwnIH0sIHt9LCAxMDI0KTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFrZXMgdHdvIFBVVCByZXF1ZXN0cyB3aGVuIHRoZSBwYXlsb2FkIHNwYW5zIHR3byBiaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJygyKSArIDYwMCA9IDYwMiBieXRlcyBlYWNoOyAyIGVudHJpZXMgZXhjZWVkIDEgS0IgbGltaXQgPT4gMiBiaW5zXG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDYwMCksIGsyOiAneScucmVwZWF0KDYwMCkgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyhrZXljaGFpbnMsIHt9LCAxKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0cmllcyBhIGZhaWxlZCBiYXRjaCBhbmQgc3VjY2VlZHMgb24gdGhlIHNlY29uZCBhdHRlbXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSg1MDAsIHsgZXJyb3I6ICdpbnRlcm5hbCBlcnJvcicgfSk7XG4gICAgICBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgYWZ0ZXIgZXhoYXVzdGluZyBhbGwgcmV0cmllcyBvbiBwZXJzaXN0ZW50IEhUVFAgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS50aW1lcygzKS5yZXBseSg1MDAsIHsgZXJyb3I6ICdpbnRlcm5hbCBlcnJvcicgfSk7XG4gICAgICBsZXQgdGhyb3duRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3duRXJyb3IgPSBlO1xuICAgICAgfVxuICAgICAgdGhyb3duRXJyb3IhLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9mYWlsZWQgYWZ0ZXIgMyByZXRyaWVzLyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIGFmdGVyIGV4aGF1c3RpbmcgYWxsIHJldHJpZXMgd2hlbiB0aGUgc2VydmVyIHJlcG9ydHMgZmFpbGVkIGtleWNoYWlucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpXG4gICAgICAgIC50aW1lcygzKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGZhaWxlZDogeyB2MTogeyBrMTogJ2VuY3J5cHRpb24gZXJyb3InIH0gfSB9KTtcbiAgICAgIGxldCB0aHJvd25FcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBydW5CYXRjaGVzKHsgazE6ICd2YWx1ZScgfSwge30sIDEwMjQsIDMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd25FcnJvciA9IGU7XG4gICAgICB9XG4gICAgICB0aHJvd25FcnJvciEubWVzc2FnZS5zaG91bGQubWF0Y2goL2hhZCBmYWlsZWQga2V5Y2hhaW5zLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaGFuZ2VQYXNzd29yZCBiYXRjaGluZyBmbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCc7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9KSxcbiAgICAgICAgdmVyaWZ5UmVzcG9uc2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgICBjbGVhclRva2VuOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgfTtcblxuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgIChiaXRnbyBhcyBhbnkpLl91c2VyID0geyB1c2VybmFtZTogJ3Rlc3RAYml0Z28uY29tJyB9O1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICd2ZXJpZnlQYXNzd29yZCcpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgICAgdXBkYXRlUGFzc3dvcmQ6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHsga2V5Y2hhaW5zOiB7IGsxOiAndjFlbmMnIH0sIHZlcnNpb246IDI1IH0pLFxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdjb2luJykucmV0dXJucyh7XG4gICAgICAgIGtleWNoYWluczogKCkgPT4gKHtcbiAgICAgICAgICB1cGRhdGVQYXNzd29yZDogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyB2MmsxOiAndjJlbmMnIH0pLFxuICAgICAgICB9KSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBQVVQgL3VzZXIva2V5Y2hhaW5zIGFuZCBQT1NUIC91c2VyL2NoYW5nZXBhc3N3b3JkIHdpdGhvdXQga2V5Y2hhaW5zIHdoZW4gYmF0Y2hpbmcgaXMgZW5hYmxlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKVxuICAgICAgICAucXVlcnkodHJ1ZSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IHRydWUsIG1heEJhdGNoU2l6ZUtCOiA5MDAgfSk7XG5cbiAgICAgIGNvbnN0IGJhdGNoUHV0U2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjaGFuZ2VQYXNzU2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhYm9keS5rZXljaGFpbnMgJiYgIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuXG4gICAgICBiYXRjaFB1dFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjaGFuZ2VQYXNzU2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzZW5kcyBrZXljaGFpbnMgaW4gdGhlIFBPU1QgYm9keSAobGVnYWN5IGZsb3cpIHdoZW4gdGhlIHNlcnZlciBkaXNhYmxlcyBiYXRjaGluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgICBjb25zdCBsZWdhY3lTY29wZSA9IG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICEhYm9keS5rZXljaGFpbnMgJiYgISFib2R5LnYyX2tleWNoYWlucylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JyB9KTtcblxuICAgICAgbGVnYWN5U2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWxscyBiYWNrIHRvIGxlZ2FjeSBmbG93IHdoZW4gdGhlIGJhdGNoaW5nIGNoZWNrIHJlcXVlc3QgZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSg1MDMsIHsgZXJyb3I6ICdzZXJ2aWNlIHVuYXZhaWxhYmxlJyB9KTtcblxuICAgICAgY29uc3QgbGVnYWN5U2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoeyBvbGRQYXNzd29yZDogJ29sZHB3JywgbmV3UGFzc3dvcmQ6ICduZXdwdycgfSk7XG5cbiAgICAgIGxlZ2FjeVNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVVc2VyRWNkaEtleWNoYWluIC0gZW5jcnlwdGlvblZlcnNpb24gdGhyZWFkaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuYml0Z28tdGVzdC5jb20nO1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAndGVzdCcgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogMiB0byBlbmNyeXB0QXN5bmMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0QXN5bmMnKTtcbiAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS92MS9rZXljaGFpbicpLnJlcGx5KDIwMCwgeyB4cHViOiAneHB1YjEyMycsIGlkOiAna2V5LWlkJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY3JlYXRlVXNlckVjZGhLZXljaGFpbignbG9naW5QYXNzd29yZCcsIDIpO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdEFzeW5jU3B5LmNhbGxlZE9uY2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRBc3luY1NweS5maXJzdENhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbiwgMik7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiB1bmRlZmluZWQgd2hlbiBub3Qgc2V0IChkZWZhdWx0cyB0byB2MSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0QXN5bmMnKTtcbiAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS92MS9rZXljaGFpbicpLnJlcGx5KDIwMCwgeyB4cHViOiAneHB1YjEyMycsIGlkOiAna2V5LWlkJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY3JlYXRlVXNlckVjZGhLZXljaGFpbignbG9naW5QYXNzd29yZCcpO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdEFzeW5jU3B5LmNhbGxlZE9uY2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRBc3luY1NweS5maXJzdENhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbiwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NwbGl0U2VjcmV0QXN5bmMgLSBlbmNyeXB0aW9uVmVyc2lvbiB0aHJlYWRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiAyIHRvIGV2ZXJ5IGVuY3J5cHRBc3luYyBzaGFyZCBjYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdEFzeW5jU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnZW5jcnlwdEFzeW5jJyk7XG4gICAgICBjb25zdCBwYXNzd29yZHMgPSBbJ3B3MScsICdwdzInLCAncHczJ107XG5cbiAgICAgIGF3YWl0IGJpdGdvLnNwbGl0U2VjcmV0QXN5bmMoe1xuICAgICAgICBzZWVkOiAnYScucmVwZWF0KDY0KSxcbiAgICAgICAgcGFzc3dvcmRzLFxuICAgICAgICBtOiAyLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdEFzeW5jU3B5LmNhbGxDb3VudCwgMywgJ3Nob3VsZCBlbmNyeXB0IGVhY2ggc2hhcmQnKTtcbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBlbmNyeXB0QXN5bmNTcHkuZ2V0Q2FsbHMoKSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCAyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IHVuZGVmaW5lZCB3aGVuIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0QXN5bmMnKTtcblxuICAgICAgYXdhaXQgYml0Z28uc3BsaXRTZWNyZXRBc3luYyh7XG4gICAgICAgIHNlZWQ6ICdiJy5yZXBlYXQoNjQpLFxuICAgICAgICBwYXNzd29yZHM6IFsncHcxJywgJ3B3MiddLFxuICAgICAgICBtOiAyLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0QXN5bmNTcHkuY2FsbENvdW50LCAyKTtcbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBlbmNyeXB0QXN5bmNTcHkuZ2V0Q2FsbHMoKSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
1027
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYml0Z29BUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsa0JBQWdCO0FBQ2hCLGlEQUE4QztBQUM5Qyw2Q0FBeUM7QUFDekMsNkNBQStCO0FBQy9CLGdEQUF3QjtBQUd4QixRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtRQUM3QyxFQUFFLENBQUMsaURBQWlELEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyx5QkFBeUIsRUFBRSxJQUFJO2FBQ2hDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMseUJBQXlCLEVBQUUsS0FBSzthQUNqQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0Qs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QUFFLENBQUM7Z0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7Z0JBQ3pCLENBQUMsRUFBRSxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELEtBQUssTUFBTSxJQUFJLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJy4uLy4uL3NyYy9iaXRnb0FQSSc7XG5pbXBvcnQgeyBQcm94eUFnZW50IH0gZnJvbSAncHJveHktYWdlbnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgdHlwZSB7IElIbWFjQXV0aFN0cmF0ZWd5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWhtYWMnO1xuXG5kZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGVuYWJsZWQgZXhwbGljaXRseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICBjb29raWVzUHJvcGFnYXRpb25FbmFibGVkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkJyk7XG4gICAgICBiaXRnby5jb29raWVzUHJvcGFnYXRpb25FbmFibGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGRpc2FibGVkIGV4cGxpY2l0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQnKTtcbiAgICAgIGJpdGdvLmNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCcpO1xuICAgICAgYml0Z28uY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZC5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVxdWVzdElkUHJlZml4IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXBlbmQgcmVxdWVzdElkUHJlZml4IHRvIFJlcXVlc3QtSUQgaGVhZGVyIHdoZW4gc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJ3Rlc3QtcHJlZml4LScsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgL150ZXN0LXByZWZpeC0vKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICcxMjM0NScsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBSZXF1ZXN0LUlEIGhlYWRlciB3aGVuIHJlcXVlc3RJZFByZWZpeCBpcyBub3Qgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgL14xMjM0NSQvKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICcxMjM0NScsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZvcm1hdCBSZXF1ZXN0LUlEIHdpdGggcHJlZml4IGFuZCBudW1lcmljIHNlcXVlbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJ215YXBwLXYxLScsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgJ215YXBwLXYxLXRyYWNlLTEyMycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ3RyYWNlLTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGVtcHR5IHN0cmluZyBwcmVmaXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgcmVxdWVzdElkUHJlZml4OiAnJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1JlcXVlc3QtSUQnLCAnYWJjLTEyMycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ2FiYy0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnaHR0cCBwcm94eSBhZ2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnaHR0cCBwcm94eSBhZ2VudCBzaGFsbCBiZSBjcmVhdGVkIHdoZW4gcHJveHkoY3VzdG9tUHJveHlhZ2VudCkgaXMgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9tUHJveHlBZ2VudCA9IG5ldyBQcm94eUFnZW50KHtcbiAgICAgICAgZ2V0UHJveHlGb3JVcmw6ICgpID0+ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY3VzdG9tUHJveHlBZ2VudCxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2N1c3RvbVByb3h5QWdlbnQnLCBjdXN0b21Qcm94eUFnZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdiaXRnbyBhcGkgaXMgc3RpbGwgaW5pdGlhdGVkIHdoZW4gcHJveHkoY3VzdG9tUHJveHlBZ2VudCkgaXMgbm90IHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdfY3VzdG9tUHJveHlBZ2VudCcsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGJhc2U1OCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJzJONnBhVDJUVTROMVhwYVpqSmlBcFdKWG9leXJMM1VXcGtaJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgYmVjaDMyIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvXG4gICAgICAgIC52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJ3RiMXFndXp5azR3NmthcXRwc2N6czVhajB3OHI3NTk4anEzNmVnbThlOTh3cXBoM3J3bWV4NjhzZXNsZ3NnJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VybCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBVUkwgZm9yIHZlcnNpb24gMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YxL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCwgMSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IFVSTCBmb3IgdmVyc2lvbiAyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoLCAyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgVVJMIGZvciB2ZXJzaW9uIDMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92My90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgsIDMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gdmVyc2lvbiAxIGlmIG5vIHZlcnNpb24gaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92MS90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNyeXB0S2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgbm8gcGFyYW1zIGFyZSBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IGNhbGxpbmcgd2l0aCBubyBwYXJhbXMgZm9yIHRlc3RcbiAgICAgICgoKSA9PiBiaXRnby5kZWNyeXB0S2V5cygpKS5zaG91bGQudGhyb3coJ01pc3NpbmcgcGFyYW1ldGVyOiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1cbiAgICAgICgoKSA9PiBiaXRnby5kZWNyeXB0S2V5cyh7IHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pKS5zaG91bGQudGhyb3coXG4gICAgICAgICdNaXNzaW5nIHBhcmFtZXRlcjogd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycydcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHBhc3N3b3JkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtXG4gICAgICAoKCkgPT4gYml0Z28uZGVjcnlwdEtleXMoeyB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXSB9KSkuc2hvdWxkLnRocm93KCdNaXNzaW5nIHBhcmFtZXRlcjogcGFzc3dvcmQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBpcyBub3QgYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgKCgpID0+IGJpdGdvLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogJ25vdCBhbiBhcnJheScsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pKS5zaG91bGQudGhyb3coXG4gICAgICAgICd3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzIG11c3QgYmUgYW4gYXJyYXknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgYXJyYXkgZm9yIGVtcHR5IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtdLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IHdhbGxldElkIGlzIG1pc3Npbmcgb3Igbm90IGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHdhbGxldElkXG4gICAgICAgICAgICB7IGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIHdhbGxldElkJyk7XG5cbiAgICAgICgoKSA9PlxuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6IDEyMywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgd2FsbGV0SWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IGVuY3J5cHRlZFBydiBpcyBtaXNzaW5nIG9yIG5vdCBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PlxuICAgICAgICBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyBlbmNyeXB0ZWRQcnZcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyBlbmNyeXB0ZWRQcnYnKTtcblxuICAgICAgKCgpID0+XG4gICAgICAgIGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJywgZW5jcnlwdGVkUHJ2OiAxMjMgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyBlbmNyeXB0ZWRQcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHdhbGxldElkcyBvZiBrZXlzIHRoYXQgZmFpbGVkIHRvIGRlY3J5cHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZWNyeXB0U3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0Jyk7XG4gICAgICBkZWNyeXB0U3R1Yi5vbkZpcnN0Q2FsbCgpLnJldHVybnMoJ2RlY3J5cHRlZC1rZXktMScpO1xuICAgICAgZGVjcnlwdFN0dWIub25TZWNvbmRDYWxsKCkudGhyb3dzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTEnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0yJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHJlc3VsdFswXS5zaG91bGQuZXF1YWwoJ3dhbGxldC1pZC0yJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBwcm9jZXNzIG11bHRpcGxlIHdhbGxldCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdCcpO1xuICAgICAgZGVjcnlwdFN0dWJcbiAgICAgICAgLndpdGhBcmdzKHsgaW5wdXQ6ICdlbmNyeXB0ZWQtZGF0YS0yJywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdFN0dWJcbiAgICAgICAgLndpdGhBcmdzKHsgaW5wdXQ6ICdlbmNyeXB0ZWQtZGF0YS00JywgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnRocm93cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdFN0dWIucmV0dXJucygnc3VjY2VzcycpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0zJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMycgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTQnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS00JyB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBkZWNyeXB0U3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuY29udGFpbkRlZXAoWyd3YWxsZXQtaWQtMicsICd3YWxsZXQtaWQtNCddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY3J5cHRLZXlzQXN5bmMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB3YWxsZXRJZHMgb2Yga2V5cyB0aGF0IGZhaWxlZCB0byBkZWNyeXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjcnlwdEFzeW5jU3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0QXN5bmMnKTtcbiAgICAgIGRlY3J5cHRBc3luY1N0dWIub25GaXJzdENhbGwoKS5yZXNvbHZlcygnZGVjcnlwdGVkLWtleS0xJyk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViLm9uU2Vjb25kQ2FsbCgpLnJlamVjdHMobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uZGVjcnlwdEtleXNBc3luYyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICByZXN1bHRbMF0uc2hvdWxkLmVxdWFsKCd3YWxsZXQtaWQtMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgcHJvY2VzcyBtdWx0aXBsZSB3YWxsZXQga2V5cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY3J5cHRBc3luY1N0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdEFzeW5jJyk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViXG4gICAgICAgIC53aXRoQXJncyh7IGlucHV0OiAnZW5jcnlwdGVkLWRhdGEtMicsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViXG4gICAgICAgIC53aXRoQXJncyh7IGlucHV0OiAnZW5jcnlwdGVkLWRhdGEtNCcsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViLnJlc29sdmVzKCdzdWNjZXNzJyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzQXN5bmMoe1xuICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0xJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMScgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTInLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0yJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMycsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTMnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC00JywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtNCcgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICB9KTtcblxuICAgICAgZGVjcnlwdEFzeW5jU3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuY29udGFpbkRlZXAoWyd3YWxsZXQtaWQtMicsICd3YWxsZXQtaWQtNCddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1VzZXItQWdlbnQgaGVhZGVyIGJhc2VkIG9uIGVudmlyb25tZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHJ1bm5pbmcgaW4gTm9kZS5qcyAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICB1c2VyQWdlbnQ6ICdUZXN0QWdlbnQvMS4wJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBFbnN1cmUgd2UncmUgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50IGJ5IHZlcmlmeWluZyB3aW5kb3cgaXMgdW5kZWZpbmVkXG4gICAgICAodHlwZW9mIHdpbmRvdykuc2hvdWxkLmVxdWFsKCd1bmRlZmluZWQnKTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdVc2VyLUFnZW50JywgJ1Rlc3RBZ2VudC8xLjAnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICd0ZXN0LTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNldCBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHJ1bm5pbmcgaW4gYnJvd3NlciAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1vY2sgdGhlIHdpbmRvdyBvYmplY3QgdG8gc2ltdWxhdGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICAgICAgY29uc3Qgd2luZG93U3R1YiA9IHsgbG9jYXRpb246ICdtb2NrJyB9O1xuICAgICAgKGdsb2JhbCBhcyBhbnkpLndpbmRvdyA9IHdpbmRvd1N0dWI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgICB1c2VyQWdlbnQ6ICdUZXN0QWdlbnQvMS4wJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAgIC5yZXBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBWZXJpZnkgVXNlci1BZ2VudCBoZWFkZXIgaXMgTk9UIHNldCB0byBvdXIgY3VzdG9tIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB1c2VyQWdlbnQgPSB0aGlzLnJlcS5oZWFkZXJzWyd1c2VyLWFnZW50J107XG4gICAgICAgICAgICBpZiAodXNlckFnZW50ICYmIHVzZXJBZ2VudC5pbmNsdWRlcygnVGVzdEFnZW50LzEuMCcpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlci1BZ2VudCBzaG91bGQgbm90IGJlIHNldCBpbiBicm93c2VyIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWzIwMCwgeyBzdGF0dXM6ICdvaycgfV07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAndGVzdC0xMjMnLFxuICAgICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZ2xvYmFsIHdpbmRvdyBtb2NrXG4gICAgICAgIGRlbGV0ZSAoZ2xvYmFsIGFzIGFueSkud2luZG93O1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaG1hY0F1dGhTdHJhdGVneSB0b2tlbiBsaWZlY3ljbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcblxuICAgIC8vIEJ1aWxkcyBhIG1vY2sgc3RyYXRlZ3kgd2hvc2Ugc2V0VG9rZW4gLyBjbGVhclRva2VuIGFyZSBzaW5vbiBzdHVicy5cbiAgICBmdW5jdGlvbiBtYWtlU3RyYXRlZ3kob3ZlcnJpZGVzOiBQYXJ0aWFsPElIbWFjQXV0aFN0cmF0ZWd5PiA9IHt9KToge1xuICAgICAgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5O1xuICAgICAgc2V0VG9rZW5TdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICBjbGVhclRva2VuU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgIH0ge1xuICAgICAgY29uc3Qgc2V0VG9rZW5TdHViID0gc2lub24uc3R1YigpLnJlc29sdmVzKCk7XG4gICAgICBjb25zdCBjbGVhclRva2VuU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpO1xuICAgICAgY29uc3Qgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5ID0ge1xuICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaG1hYzogJ2htYWMnLCB0aW1lc3RhbXA6IDEsIHRva2VuSGFzaDogJ2hhc2gnIH0pLFxuICAgICAgICB2ZXJpZnlSZXNwb25zZTogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2hhc2hlZC1wdycpLFxuICAgICAgICBzZXRUb2tlbjogc2V0VG9rZW5TdHViLFxuICAgICAgICBjbGVhclRva2VuOiBjbGVhclRva2VuU3R1YixcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIsIGNsZWFyVG9rZW5TdHViIH07XG4gICAgfVxuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhdXRoZW50aWNhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAucG9zdCgnL2FwaS9hdXRoL3YxL3Nlc3Npb24nKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4bXlhY2Nlc3N0b2tlbicsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlKHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJywgcGFzc3dvcmQ6ICdodW50ZXIyJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZXRUb2tlblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKCd2MnhteWFjY2Vzc3Rva2VuJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2F3YWl0cyBzZXRUb2tlbiBiZWZvcmUgbWFraW5nIGVuc3VyZUVjZGhLZXljaGFpbiByZXF1ZXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3Q6IGlmIHNldFRva2VuIGlzIG5vdCBhd2FpdGVkLCB0aGVcbiAgICAgICAgLy8gc3RyYXRlZ3kncyBrZXkgbWF0ZXJpYWwgd29uJ3QgYmUgcmVhZHkgYmVmb3JlIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzXG4gICAgICAgIC8vIGlzIGNhbGxlZCBmb3IgdGhlIEdFVCAvdXNlci9zZXR0aW5ncyByZXF1ZXN0LCBhbmQgaXQgd291bGQgdGhyb3cuXG4gICAgICAgIGxldCBrZXlSZWFkeSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5IH0gPSBtYWtlU3RyYXRlZ3koe1xuICAgICAgICAgIHNldFRva2VuOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNpbXVsYXRlIG5vbi10cml2aWFsIGFzeW5jIGtleSBkZXJpdmF0aW9uIChsaWtlIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KS5cbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgICAgICAgICAga2V5UmVhZHkgPSB0cnVlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICgha2V5UmVhZHkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0b2tlbiBhdmFpbGFibGUuIENhbGwgc2V0VG9rZW4oKSBvciByZXN0b3JlVG9rZW4oKSBmaXJzdC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvYXV0aC92MS9zZXNzaW9uJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeG15dG9rZW4nLFxuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUaGUgR0VUIC91c2VyL3NldHRpbmdzIHJlcXVlc3QgbWFkZSBieSBlbnN1cmVVc2VyRWNkaEtleWNoYWluSXNDcmVhdGVkXG4gICAgICAgIC8vIG11c3Qgc3VjY2VlZCDigJQgaXQgd291bGQgdGhyb3cgaWYgc2V0VG9rZW4gd2Fzbid0IGF3YWl0ZWQgZmlyc3QuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3VzZXIvc2V0dGluZ3MnKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHNldHRpbmdzOiB7IGVjZGhLZXljaGFpbjogJ3hwdWIxMjMnIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlKHtcbiAgICAgICAgICB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nLFxuICAgICAgICAgIHBhc3N3b3JkOiAnaHVudGVyMicsXG4gICAgICAgICAgZW5zdXJlRWNkaEtleWNoYWluOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBrZXlSZWFkeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXV0aGVudGljYXRlV2l0aFBhc3NrZXkoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkUGFzc2tleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6ICdjcmVkZW50aWFsLWlkJyxcbiAgICAgICAgcmF3SWQ6ICdyYXctaWQnLFxuICAgICAgICB0eXBlOiAncHVibGljLWtleScsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgYXV0aGVudGljYXRvckRhdGE6ICdhdXRoLWRhdGEnLFxuICAgICAgICAgIGNsaWVudERhdGFKU09OOiAnY2xpZW50LWRhdGEnLFxuICAgICAgICAgIHNpZ25hdHVyZTogJ3NpZycsXG4gICAgICAgICAgdXNlckhhbmRsZTogJ3VzZXItaGFuZGxlLTEyMycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL2F1dGgvdjEvc2Vzc2lvbicpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhwYXNza2V5dG9rZW4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhQYXNza2V5KHZhbGlkUGFzc2tleSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4cGFzc2tleXRva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjbGVhckFzeW5jKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2xlYXJzIF90b2tlbiBhbmQgY2FsbHMgY2xlYXJUb2tlbiBvbiB0aGUgc3RyYXRlZ3knLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIGNsZWFyVG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHNvbWV0b2tlbicgfSk7XG4gICAgICAgIChiaXRnbyBhcyBhbnkpLl90b2tlbi5zaG91bGQuZXF1YWwoJ3YyeHNvbWV0b2tlbicpO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmNsZWFyQXN5bmMoKTtcblxuICAgICAgICAoKGJpdGdvIGFzIGFueSkuX3Rva2VuID09PSB1bmRlZmluZWQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGNsZWFyVG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3JlZnJlc2hUb2tlbigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIG5ldyBhY2Nlc3NfdG9rZW4gZnJvbSB0aGUgT0F1dGggcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6IFJPT1QsXG4gICAgICAgICAgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgY2xpZW50SWQ6ICdjbGllbnQtaWQnLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogJ2NsaWVudC1zZWNyZXQnLFxuICAgICAgICB9KTtcbiAgICAgICAgKGJpdGdvIGFzIGFueSkuX3JlZnJlc2hUb2tlbiA9ICdvbGQtcmVmcmVzaC10b2tlbic7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvb2F1dGgvdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhuZXd0b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJ25ldy1yZWZyZXNoLXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28ucmVmcmVzaFRva2VuKCk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4bmV3dG9rZW4nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2F1dGhlbnRpY2F0ZVdpdGhBdXRoQ29kZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiBmcm9tIHRoZSBPQXV0aCByZXNwb25zZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgICAgY3VzdG9tUm9vdFVSSTogUk9PVCxcbiAgICAgICAgICBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICBjbGllbnRJZDogJ2NsaWVudC1pZCcsXG4gICAgICAgICAgY2xpZW50U2VjcmV0OiAnY2xpZW50LXNlY3JldCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL29hdXRoL3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4YXV0aGNvZGV0b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJ3JlZnJlc2gtdG9rZW4nLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXV0aGVudGljYXRlV2l0aEF1dGhDb2RlIGNhbGxzIHRoaXMubWUoKSBhZnRlciBzZXR0aW5nIHRoZSB0b2tlblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS91c2VyL21lJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGVXaXRoQXV0aENvZGUoeyBhdXRoQ29kZTogJ215LWF1dGgtY29kZScgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4YXV0aGNvZGV0b2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc3luYyB0b2tlbi1zZXR0aW5nIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuIGRvZXMgbm90IGNhbGwgc2V0VG9rZW4gKHN5bmNocm9ub3VzIOKAlCBjYWxsZXIgbXVzdCBpbnZva2Ugc2V0VG9rZW4gb24gdGhlIHN0cmF0ZWd5IG1hbnVhbGx5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHN5bmN0b2tlbicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZnJvbUpTT04gZG9lcyBub3QgY2FsbCBzZXRUb2tlbiAoc3luY2hyb25vdXMg4oCUIGNhbGxlciBtdXN0IGludm9rZSBzZXRUb2tlbiBvbiB0aGUgc3RyYXRlZ3kgbWFudWFsbHkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIChiaXRnbyBhcyBhbnkpLmZyb21KU09OKHsgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sIHRva2VuOiAndjJ4anNvbnRva2VuJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYWRkQWNjZXNzVG9rZW4oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkUGFyYW1zID0ge1xuICAgICAgICBsYWJlbDogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICBzY29wZTogWyd3YWxsZXRfdmlld19hbGwnXSxcbiAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICB9O1xuXG4gICAgICBpdCgnc2hvdWxkIHVzZSBITUFDIGF1dGggd2hlbiBlY2RoWHBydiBpcyBhYnNlbnQgYnV0IGhtYWNBdXRoU3RyYXRlZ3kgaXMgYXV0aGVudGljYXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgLy8gRG8gTk9UIHNldCBfZWNkaFhwcnYg4oCUIHNpbXVsYXRlcyBTU08vV2ViQ3J5cHRvIHNlc3Npb25cbiAgICAgICAgLy8gU2V0IGEgdjJ4IHRva2VuIHNvIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCB0aGUgdjIgYXV0aCBwYXRoXG4gICAgICAgIGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiAndjJ4c3RyYXRlZ3l0b2tlbicgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKFJPT1QpLnBvc3QoJy9hcGkvYXV0aC92MS9hY2Nlc3N0b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHRva2VuOiAndjJ4bmV3cGxhaW50b2tlbicsXG4gICAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uYWRkQWNjZXNzVG9rZW4odmFsaWRQYXJhbXMpO1xuXG4gICAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIC8vIGZvcmNlVjFBdXRoIHNob3VsZCBOT1QgaGF2ZSBiZWVuIHNldCwgc28gbm8gZG93bmdyYWRlIHdhcm5pbmdcbiAgICAgICAgKHJlc3VsdCBhcyBhbnkpLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FybmluZycpO1xuICAgICAgICAvLyBUaGUgcGxhaW4gdG9rZW4gZnJvbSB0aGUgcmVzcG9uc2UgYm9keSBzaG91bGQgYmUgcmV0dXJuZWQgZGlyZWN0bHlcbiAgICAgICAgcmVzdWx0LnRva2VuLnNob3VsZC5lcXVhbCgndjJ4bmV3cGxhaW50b2tlbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBsYWluIHRva2VuIGZyb20gcmVzcG9uc2UgYm9keSB3aGVuIGVjZGhYcHJ2IGlzIGFic2VudCBidXQgc3RyYXRlZ3lBdXRoZW50aWNhdGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBoYW5kbGVUb2tlblNweSA9IHNpbm9uLnNweShCaXRHb0FQSS5wcm90b3R5cGUsICdoYW5kbGVUb2tlbklzc3VhbmNlQXN5bmMnKTtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2MnhzdHJhdGVneXRva2VuJyB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvYXV0aC92MS9hY2Nlc3N0b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHRva2VuOiAndjJ4cGxhaW50b2tlbicsXG4gICAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uYWRkQWNjZXNzVG9rZW4odmFsaWRQYXJhbXMpO1xuXG4gICAgICAgIC8vIGhhbmRsZVRva2VuSXNzdWFuY2VBc3luYyBzaG91bGQgTk9UIGJlIGNhbGxlZCDigJQgbm8gRUNESCBkZWNyeXB0aW9uIG5lZWRlZFxuICAgICAgICBoYW5kbGVUb2tlblNweS5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgIHJlc3VsdC50b2tlbi5zaG91bGQuZXF1YWwoJ3YyeHBsYWludG9rZW4nKTtcblxuICAgICAgICBoYW5kbGVUb2tlblNweS5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGlsbCBmb3JjZSBWMSBhdXRoIHdoZW4gbmVpdGhlciBlY2RoWHBydiBub3Igc3RyYXRlZ3kgaXMgYXV0aGVudGljYXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG4gICAgICAgIGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiAndjJ4bGVnYWN5dG9rZW4nIH0pO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS9hdXRoL3YxL2FjY2Vzc3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgdG9rZW46ICd2MnhsZWdhY3lyZXN1bHQnLFxuICAgICAgICAgIGxhYmVsOiAndGVzdC10b2tlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmFkZEFjY2Vzc1Rva2VuKHZhbGlkUGFyYW1zKTtcblxuICAgICAgICAvLyBWMSBhdXRoIHBhdGggc2hvdWxkIGFkZCB0aGUgZG93bmdyYWRlIHdhcm5pbmdcbiAgICAgICAgKHJlc3VsdCBhcyBhbnkpLndhcm5pbmcuc2hvdWxkLm1hdGNoKC9wcm90b2NvbCBkb3duZ3JhZGUvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN0aWxsIGZvcmNlIFYxIGF1dGggd2hlbiBpc0F1dGhlbnRpY2F0ZWQgaXMgbm90IGRlZmluZWQgb24gc3RyYXRlZ3knLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3kgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICAvLyBzdHJhdGVneSBoYXMgbm8gaXNBdXRoZW50aWNhdGVkIG1ldGhvZCBieSBkZWZhdWx0IGZyb20gbWFrZVN0cmF0ZWd5XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG4gICAgICAgIGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiAndjJ4bm9hdXRobWV0aG9kJyB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvYXV0aC92MS9hY2Nlc3N0b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHRva2VuOiAndjJ4cmVzdWx0JyxcbiAgICAgICAgICBsYWJlbDogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaXRnby5hZGRBY2Nlc3NUb2tlbih2YWxpZFBhcmFtcyk7XG5cbiAgICAgICAgLy8gV2l0aG91dCBpc0F1dGhlbnRpY2F0ZWQsIHNob3VsZCBmYWxsIGJhY2sgdG8gVjEgYXV0aFxuICAgICAgICAocmVzdWx0IGFzIGFueSkud2FybmluZy5zaG91bGQubWF0Y2goL3Byb3RvY29sIGRvd25ncmFkZS8pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb25zdGFudHMgcGFyYW1ldGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWxsb3cgcGFzc2luZyBjb25zdGFudHMgdmlhIG9wdGlvbnMgYW5kIGV4cG9zZSB2aWEgZmV0Y2hDb25zdGFudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY2xpZW50Q29uc3RhbnRzOiB7IG1heEZlZVJhdGU6ICcxMjMxMjMxMjMxMjMxMjMnIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUmF0ZScsICcxMjMxMjMxMjMxMjMxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVmcmVzaCBjb25zdGFudHMgd2hlbiBjYWNoZSBoYXMgZXhwaXJlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBjYWNoZWQgY29uc3RhbnRzIHdpdGggYW4gZXhwaXJlZCBjYWNoZVxuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNbJ2N1c3RvbSddID0geyBtYXhGZWVSYXRlOiAnb2xkLXZhbHVlJyB9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZVsnY3VzdG9tJ10gPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCk7IC8vIEV4cGlyZWQgMSBzZWNvbmQgYWdvXG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb25zdGFudHM6IHsgbWF4RmVlUmF0ZTogJ25ldy12YWx1ZScsIG5ld0NvbnN0YW50OiAnYWRkZWQnIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuXG4gICAgICAvLyBTaG91bGQgcmV0dXJuIHRoZSBuZXcgY29uc3RhbnRzIGZyb20gdGhlIHNlcnZlclxuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhGZWVSYXRlJywgJ25ldy12YWx1ZScpO1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCduZXdDb25zdGFudCcsICdhZGRlZCcpO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjYWNoZWQgY29uc3RhbnRzIHdoZW4gY2FjaGUgaXMgc3RpbGwgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgY2FjaGVkIGNvbnN0YW50cyB3aXRoIGEgZnV0dXJlIGV4cGlyeVxuICAgICAgY29uc3QgY2FjaGVkQ29uc3RhbnRzID0geyBtYXhGZWVSYXRlOiAnY2FjaGVkLXZhbHVlJywgYW5vdGhlclNldHRpbmc6ICdjYWNoZWQtc2V0dGluZycgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IGNhY2hlZENvbnN0YW50cztcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDApOyAvLyBWYWxpZCBmb3IgNSBtb3JlIG1pbnV0ZXNcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBjb25zdGFudHM6IHsgc2hvdWxkTm90QmVVc2VkOiB0cnVlIH0gfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG5cbiAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIGNhY2hlZCBjb25zdGFudHNcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuZGVlcEVxdWFsKGNhY2hlZENvbnN0YW50cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIEhUVFAgcmVxdWVzdCB3YXMgbWFkZSAoc2luY2UgY2FjaGUgd2FzIHZhbGlkKVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGNhY2hlZCBjb25zdGFudHMgd2hlbiBubyBjYWNoZSBleHBpcnkgaXMgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIGNhY2hlZCBjb25zdGFudHMgd2l0aCBubyBleHBpcnlcbiAgICAgIGNvbnN0IGNhY2hlZENvbnN0YW50cyA9IHsgbWF4RmVlUmF0ZTogJ25vLWV4cGlyeS12YWx1ZScgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IGNhY2hlZENvbnN0YW50cztcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGNvbnN0YW50czogeyBzaG91bGROb3RCZVVzZWQ6IHRydWUgfSB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiB0aGUgY2FjaGVkIGNvbnN0YW50c1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5kZWVwRXF1YWwoY2FjaGVkQ29uc3RhbnRzKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgbm8gSFRUUCByZXF1ZXN0IHdhcyBtYWRlIChzaW5jZSBubyBleHBpcnkgbWVhbnMgY2FjaGUgaXMgYWx3YXlzIHZhbGlkKVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3BhY2tLZXljaGFpbnNGRkQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGZmZChcbiAgICAgIGtleWNoYWluczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIHYyS2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgbWF4QmF0Y2hTaXplQnl0ZXM6IG51bWJlclxuICAgICk6IEFycmF5PHsgdjFCYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgdjJCYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgc2l6ZUJ5dGVzOiBudW1iZXIgfT4ge1xuICAgICAgcmV0dXJuIChiaXRnbyBhcyBhbnkpLnBhY2tLZXljaGFpbnNGRkQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgbWF4QmF0Y2hTaXplQnl0ZXMpO1xuICAgIH1cblxuICAgIGl0KCdyZXR1cm5zIGFuIGVtcHR5IGFycmF5IHdoZW4gYm90aCBpbnB1dHMgYXJlIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmlucyA9IGZmZCh7fSwge30sIDEwMjQpO1xuICAgICAgYmlucy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3BhY2tzIGFsbCBpdGVtcyBpbnRvIGEgc2luZ2xlIGJpbiB3aGVuIHRoZXkgZml0IHdpdGhpbiB0aGUgbGltaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBFYWNoIGVudHJ5OiAyLWJ5dGUgaWQgKyAxMC1ieXRlIHZhbHVlID0gMTIgYnl0ZXM7IDUgZW50cmllcyA9IDYwIGJ5dGVzIDwgMjAwIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAnYWFhYWFhYWFhYScsIGsyOiAnYmJiYmJiYmJiYicsIGszOiAnY2NjY2NjY2NjYycgfTtcbiAgICAgIGNvbnN0IHYyS2V5Y2hhaW5zID0geyB2MTogJ2RkZGRkZGRkZGQnLCB2MjogJ2VlZWVlZWVlZWUnIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywgdjJLZXljaGFpbnMsIDIwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIE9iamVjdC5rZXlzKGJpbnNbMF0udjFCYXRjaCkuc2hvdWxkLmhhdmUubGVuZ3RoKDMpO1xuICAgICAgT2JqZWN0LmtleXMoYmluc1swXS52MkJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc3BsaXRzIGludG8gbXVsdGlwbGUgYmlucyB3aGVuIGEgc2luZ2xlIGJpbiBjYW5ub3QgZml0IGFsbCBpdGVtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlkPSdrMScgKDIgYnl0ZXMpICsgNjAwLWNoYXIgdmFsdWUgPSA2MDIgYnl0ZXM7IDIgZW50cmllcyBleGNlZWQgNzAwLWJ5dGUgbGltaXRcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd4Jy5yZXBlYXQoNjAwKSwgazI6ICd5Jy5yZXBlYXQoNjAwKSB9O1xuICAgICAgY29uc3QgYmlucyA9IGZmZChrZXljaGFpbnMsIHt9LCA3MDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYSBzaW5nbGUgaXRlbSBleGNlZWRzIG1heEJhdGNoU2l6ZUJ5dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJyAoMiBieXRlcykgKyAyMDAtY2hhciB2YWx1ZSA9IDIwMiBieXRlcyA+IDEwMC1ieXRlIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDIwMCkgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZmZChrZXljaGFpbnMsIHt9LCAxMDApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVycm9yIG5vdCB0aHJvd24nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5tYXRjaCgvZXhjZWVkcyB0aGUgbWF4aW11bSBiYXRjaCBzaXplLyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncGxhY2VzIFYxIGtleWNoYWlucyBpbiB2MUJhdGNoIGFuZCBWMiBrZXljaGFpbnMgaW4gdjJCYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd2MXZhbHVlJyB9O1xuICAgICAgY29uc3QgdjJLZXljaGFpbnMgPSB7IGsyOiAndjJ2YWx1ZScgfTtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgMTAwMDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBiaW5zWzBdLnYxQmF0Y2guc2hvdWxkLmhhdmUucHJvcGVydHkoJ2sxJywgJ3YxdmFsdWUnKTtcbiAgICAgIGJpbnNbMF0udjJCYXRjaC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnazInLCAndjJ2YWx1ZScpO1xuICAgICAgYmluc1swXS52MUJhdGNoLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnazInKTtcbiAgICAgIGJpbnNbMF0udjJCYXRjaC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2sxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBGRkQgb3JkZXJpbmcgc28gdGhlIGxhcmdlc3QgaXRlbSBpcyBwYWNrZWQgZmlyc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAnYmlnJzogaWQoMykgKyA0OTcgYnl0ZXMgPSA1MDAgYnl0ZXM7ICdzMScsJ3MyJzogaWQoMikgKyA5OCBieXRlcyA9IDEwMCBieXRlcyBlYWNoXG4gICAgICAvLyBtYXhCYXRjaFNpemVCeXRlcyA9IDYwMFxuICAgICAgLy8gRkZEIG9yZGVyIChkZXNjZW5kaW5nKTogYmlnKDUwMCksIHMxKDEwMCksIHMyKDEwMClcbiAgICAgIC8vICAgYmluMDogYmlnKDUwMCkuIHMxOiA1MDArMTAwPTYwMCA8PTYwMCwgZml0cy4gczI6IDYwMCsxMDA9NzAwID4gNjAwLCBuZXcgYmluMS5cbiAgICAgIC8vICAgUmVzdWx0OiBiaW4wPXtiaWcsczF9LCBiaW4xPXtzMn1cbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgYmlnOiAneCcucmVwZWF0KDQ5NyksIHMxOiAneScucmVwZWF0KDk4KSwgczI6ICd6Jy5yZXBlYXQoOTgpIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywge30sIDYwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIC8vICdiaWcnIHNob3VsZCBzaGFyZSBpdHMgYmluIHdpdGggb25lIHNtYWxsIGl0ZW0gKEZGRCBwYWNrcyB0aGUgbGFyZ2VzdCBmaXJzdClcbiAgICAgIGNvbnN0IGJpbldpdGhCaWcgPSBiaW5zLmZpbmQoKGIpID0+ICdiaWcnIGluIGIudjFCYXRjaCkhO1xuICAgICAgT2JqZWN0LmtleXMoYmluV2l0aEJpZy52MUJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9jZXNzS2V5Y2hhaW5QYXNzd29yZFVwZGF0ZXNJbkJhdGNoZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdG9rZW5IYXNoOiAnaGFzaCcgfSksXG4gICAgICAgIHZlcmlmeVJlc3BvbnNlOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRIbWFjOiAnaG1hYycsXG4gICAgICAgICAgc2lnbmF0dXJlU3ViamVjdDogJycsXG4gICAgICAgICAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IHRydWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNhbGN1bGF0ZUhNQUM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKSxcbiAgICAgICAgY2xlYXJUb2tlbjogc2lub24uc3R1YigpLnJlc29sdmVzKCksXG4gICAgICB9O1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBydW5CYXRjaGVzKFxuICAgICAga2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgdjJLZXljaGFpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBtYXhCYXRjaFNpemVLQjogbnVtYmVyLFxuICAgICAgbWF4UmV0cmllcyA9IDNcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHJldHVybiAoYml0Z28gYXMgYW55KS5wcm9jZXNzS2V5Y2hhaW5QYXNzd29yZFVwZGF0ZXNJbkJhdGNoZXMoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgbWF4QmF0Y2hTaXplS0IsIG1heFJldHJpZXMpO1xuICAgIH1cblxuICAgIGl0KCdtYWtlcyBhIHNpbmdsZSBQVVQgcmVxdWVzdCBmb3IgYSBzbWFsbCBwYXlsb2FkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAnc21hbGwnIH0sIHt9LCAxMDI0KTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFrZXMgdHdvIFBVVCByZXF1ZXN0cyB3aGVuIHRoZSBwYXlsb2FkIHNwYW5zIHR3byBiaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJygyKSArIDYwMCA9IDYwMiBieXRlcyBlYWNoOyAyIGVudHJpZXMgZXhjZWVkIDEgS0IgbGltaXQgPT4gMiBiaW5zXG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDYwMCksIGsyOiAneScucmVwZWF0KDYwMCkgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyhrZXljaGFpbnMsIHt9LCAxKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0cmllcyBhIGZhaWxlZCBiYXRjaCBhbmQgc3VjY2VlZHMgb24gdGhlIHNlY29uZCBhdHRlbXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSg1MDAsIHsgZXJyb3I6ICdpbnRlcm5hbCBlcnJvcicgfSk7XG4gICAgICBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgYWZ0ZXIgZXhoYXVzdGluZyBhbGwgcmV0cmllcyBvbiBwZXJzaXN0ZW50IEhUVFAgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS50aW1lcygzKS5yZXBseSg1MDAsIHsgZXJyb3I6ICdpbnRlcm5hbCBlcnJvcicgfSk7XG4gICAgICBsZXQgdGhyb3duRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3duRXJyb3IgPSBlO1xuICAgICAgfVxuICAgICAgdGhyb3duRXJyb3IhLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9mYWlsZWQgYWZ0ZXIgMyByZXRyaWVzLyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIGFmdGVyIGV4aGF1c3RpbmcgYWxsIHJldHJpZXMgd2hlbiB0aGUgc2VydmVyIHJlcG9ydHMgZmFpbGVkIGtleWNoYWlucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpXG4gICAgICAgIC50aW1lcygzKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGZhaWxlZDogeyB2MTogeyBrMTogJ2VuY3J5cHRpb24gZXJyb3InIH0gfSB9KTtcbiAgICAgIGxldCB0aHJvd25FcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBydW5CYXRjaGVzKHsgazE6ICd2YWx1ZScgfSwge30sIDEwMjQsIDMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd25FcnJvciA9IGU7XG4gICAgICB9XG4gICAgICB0aHJvd25FcnJvciEubWVzc2FnZS5zaG91bGQubWF0Y2goL2hhZCBmYWlsZWQga2V5Y2hhaW5zLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaGFuZ2VQYXNzd29yZCBiYXRjaGluZyBmbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCc7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9KSxcbiAgICAgICAgdmVyaWZ5UmVzcG9uc2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgICBjbGVhclRva2VuOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgfTtcblxuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgIChiaXRnbyBhcyBhbnkpLl91c2VyID0geyB1c2VybmFtZTogJ3Rlc3RAYml0Z28uY29tJyB9O1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICd2ZXJpZnlQYXNzd29yZCcpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgICAgdXBkYXRlUGFzc3dvcmQ6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHsga2V5Y2hhaW5zOiB7IGsxOiAndjFlbmMnIH0sIHZlcnNpb246IDI1IH0pLFxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdjb2luJykucmV0dXJucyh7XG4gICAgICAgIGtleWNoYWluczogKCkgPT4gKHtcbiAgICAgICAgICB1cGRhdGVQYXNzd29yZDogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyB2MmsxOiAndjJlbmMnIH0pLFxuICAgICAgICB9KSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBQVVQgL3VzZXIva2V5Y2hhaW5zIGFuZCBQT1NUIC91c2VyL2NoYW5nZXBhc3N3b3JkIHdpdGhvdXQga2V5Y2hhaW5zIHdoZW4gYmF0Y2hpbmcgaXMgZW5hYmxlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKVxuICAgICAgICAucXVlcnkodHJ1ZSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IHRydWUsIG1heEJhdGNoU2l6ZUtCOiA5MDAgfSk7XG5cbiAgICAgIGNvbnN0IGJhdGNoUHV0U2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjaGFuZ2VQYXNzU2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhYm9keS5rZXljaGFpbnMgJiYgIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuXG4gICAgICBiYXRjaFB1dFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjaGFuZ2VQYXNzU2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzZW5kcyBrZXljaGFpbnMgaW4gdGhlIFBPU1QgYm9keSAobGVnYWN5IGZsb3cpIHdoZW4gdGhlIHNlcnZlciBkaXNhYmxlcyBiYXRjaGluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgICBjb25zdCBsZWdhY3lTY29wZSA9IG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICEhYm9keS5rZXljaGFpbnMgJiYgISFib2R5LnYyX2tleWNoYWlucylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JyB9KTtcblxuICAgICAgbGVnYWN5U2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWxscyBiYWNrIHRvIGxlZ2FjeSBmbG93IHdoZW4gdGhlIGJhdGNoaW5nIGNoZWNrIHJlcXVlc3QgZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSg1MDMsIHsgZXJyb3I6ICdzZXJ2aWNlIHVuYXZhaWxhYmxlJyB9KTtcblxuICAgICAgY29uc3QgbGVnYWN5U2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoeyBvbGRQYXNzd29yZDogJ29sZHB3JywgbmV3UGFzc3dvcmQ6ICduZXdwdycgfSk7XG5cbiAgICAgIGxlZ2FjeVNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVVc2VyRWNkaEtleWNoYWluIC0gZW5jcnlwdGlvblZlcnNpb24gdGhyZWFkaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuYml0Z28tdGVzdC5jb20nO1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAndGVzdCcgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogMiB0byBlbmNyeXB0QXN5bmMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0QXN5bmMnKTtcbiAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS92MS9rZXljaGFpbicpLnJlcGx5KDIwMCwgeyB4cHViOiAneHB1YjEyMycsIGlkOiAna2V5LWlkJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY3JlYXRlVXNlckVjZGhLZXljaGFpbignbG9naW5QYXNzd29yZCcsIDIpO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdEFzeW5jU3B5LmNhbGxlZE9uY2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRBc3luY1NweS5maXJzdENhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbiwgMik7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiB1bmRlZmluZWQgd2hlbiBub3Qgc2V0IChkZWZhdWx0cyB0byB2MSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0QXN5bmMnKTtcbiAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS92MS9rZXljaGFpbicpLnJlcGx5KDIwMCwgeyB4cHViOiAneHB1YjEyMycsIGlkOiAna2V5LWlkJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY3JlYXRlVXNlckVjZGhLZXljaGFpbignbG9naW5QYXNzd29yZCcpO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdEFzeW5jU3B5LmNhbGxlZE9uY2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRBc3luY1NweS5maXJzdENhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbiwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NwbGl0U2VjcmV0QXN5bmMgLSBlbmNyeXB0aW9uVmVyc2lvbiB0aHJlYWRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiAyIHRvIGV2ZXJ5IGVuY3J5cHRBc3luYyBzaGFyZCBjYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdEFzeW5jU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnZW5jcnlwdEFzeW5jJyk7XG4gICAgICBjb25zdCBwYXNzd29yZHMgPSBbJ3B3MScsICdwdzInLCAncHczJ107XG5cbiAgICAgIGF3YWl0IGJpdGdvLnNwbGl0U2VjcmV0QXN5bmMoe1xuICAgICAgICBzZWVkOiAnYScucmVwZWF0KDY0KSxcbiAgICAgICAgcGFzc3dvcmRzLFxuICAgICAgICBtOiAyLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdEFzeW5jU3B5LmNhbGxDb3VudCwgMywgJ3Nob3VsZCBlbmNyeXB0IGVhY2ggc2hhcmQnKTtcbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBlbmNyeXB0QXN5bmNTcHkuZ2V0Q2FsbHMoKSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCAyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IHVuZGVmaW5lZCB3aGVuIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0QXN5bmMnKTtcblxuICAgICAgYXdhaXQgYml0Z28uc3BsaXRTZWNyZXRBc3luYyh7XG4gICAgICAgIHNlZWQ6ICdiJy5yZXBlYXQoNjQpLFxuICAgICAgICBwYXNzd29yZHM6IFsncHcxJywgJ3B3MiddLFxuICAgICAgICBtOiAyLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0QXN5bmNTcHkuY2FsbENvdW50LCAyKTtcbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBlbmNyeXB0QXN5bmNTcHkuZ2V0Q2FsbHMoKSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|