appium-adb-test
Version:
Android Debug Bridge interface
217 lines (181 loc) • 26.4 kB
JavaScript
var _regeneratorRuntime = require('babel-runtime/regenerator')['default'];
var _Promise = require('babel-runtime/core-js/promise')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
var _this = this;
var _libHelpers = require('../../lib/helpers');
var _appiumTestSupport = require('appium-test-support');
var _appiumSupport = require('appium-support');
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _chai = require('chai');
var _chai2 = _interopRequireDefault(_chai);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var should = _chai2['default'].should;
describe('helpers', function () {
describe('getPossibleActivityNames', function () {
it('should correctly remove pkg from pkg.activity.name', function () {
(0, _libHelpers.getPossibleActivityNames)('pkg', 'pkg.activity.name').should.include('.activity.name');
});
it('should return .act.name when act.name is passed', function () {
(0, _libHelpers.getPossibleActivityNames)('pkg', 'act.name').should.include('.act.name');
});
it('should not amend a valid activity name', function () {
(0, _libHelpers.getPossibleActivityNames)('pkg', '.activity.name').should.include('.activity.name');
});
it('should handle case where application id is different from package name', function () {
(0, _libHelpers.getPossibleActivityNames)('com.ga.aaa.android.bbb.activities.local', 'com.ga.aaa.android.bbb.activity.FirstLaunchActivity').should.include('com.ga.aaa.android.bbb.activity.FirstLaunchActivity');
});
});
describe('getDirectories', (0, _appiumTestSupport.withMocks)({ fs: _appiumSupport.fs }, function (mocks) {
it('should sort the directories', function callee$2$0() {
var rootPath, directories;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
rootPath = '/path/to/root';
directories = ['c', 'b', 'a', '1', '2'];
mocks.fs.expects('readdir').once().withExactArgs(rootPath).returns(directories);
mocks.fs.expects('lstat').exactly(5).returns(_Promise.resolve({ isDirectory: function isDirectory() {
return true;
} }));
context$3$0.next = 6;
return _regeneratorRuntime.awrap((0, _libHelpers.getDirectories)(rootPath));
case 6:
context$3$0.t0 = ['1', '2', 'a', 'b', 'c'];
context$3$0.sent.should.eql(context$3$0.t0);
mocks.fs.verify();
case 9:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('getAndroidPlatformAndPath', (0, _appiumTestSupport.withMocks)({ fs: _appiumSupport.fs, path: _path2['default'] }, function (mocks) {
it('should return null if no ANDROID_HOME is set', function callee$2$0() {
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
context$3$0.next = 2;
return _regeneratorRuntime.awrap((0, _libHelpers.getAndroidPlatformAndPath)());
case 2:
context$3$0.t0 = context$3$0.sent;
should(context$3$0.t0).not.exist;
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should get the latest available API', function callee$2$0() {
var oldAndroidHome, platformAndPath;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
oldAndroidHome = process.env.ANDROID_HOME;
process.env.ANDROID_HOME = '/path/to/android/home';
mocks.fs.expects('exists').exactly(2).onCall(0).returns(false).onCall(1).returns(true);
mocks.path.expects('resolve').exactly(3).onCall(0).returns('/path/to').onCall(1).returns('/path/to/apis1').onCall(2).returns('/path/to/apis2');
context$3$0.next = 6;
return _regeneratorRuntime.awrap((0, _libHelpers.getAndroidPlatformAndPath)());
case 6:
platformAndPath = context$3$0.sent;
platformAndPath.platform.should.equal('android-23');
platformAndPath.platformPath.should.equal('/path/to/apis2');
mocks.fs.verify();
mocks.path.verify();
process.env.ANDROID_HOME = oldAndroidHome;
case 12:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('buildStartCmd', function () {
var startOptions = {
pkg: 'com.something',
activity: '.SomeActivity'
};
it('should parse optionalIntentArguments with single key', function () {
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key' }, startOptions), 20);
cmd[cmd.length - 2].should.eql('-d');
cmd[cmd.length - 1].should.eql('key');
});
it('should parse optionalIntentArguments with single key/value pair', function () {
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key value' }, startOptions), 20);
cmd[cmd.length - 3].should.eql('-d');
cmd[cmd.length - 2].should.eql('key');
cmd[cmd.length - 1].should.eql('value');
});
it('should parse optionalIntentArguments with single key/value pair with spaces', function () {
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key value value2' }, startOptions), 20);
cmd[cmd.length - 3].should.eql('-d');
cmd[cmd.length - 2].should.eql('key');
cmd[cmd.length - 1].should.eql('value value2');
});
it('should parse optionalIntentArguments with multiple keys', function () {
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key1 -e key2' }, startOptions), 20);
cmd[cmd.length - 4].should.eql('-d');
cmd[cmd.length - 3].should.eql('key1');
cmd[cmd.length - 2].should.eql('-e');
cmd[cmd.length - 1].should.eql('key2');
});
it('should parse optionalIntentArguments with multiple key/value pairs', function () {
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key1 value1 -e key2 value2' }, startOptions), 20);
cmd[cmd.length - 6].should.eql('-d');
cmd[cmd.length - 5].should.eql('key1');
cmd[cmd.length - 4].should.eql('value1');
cmd[cmd.length - 3].should.eql('-e');
cmd[cmd.length - 2].should.eql('key2');
cmd[cmd.length - 1].should.eql('value2');
});
it('should parse optionalIntentArguments with hyphens', function () {
var arg = 'http://some-url-with-hyphens.com/';
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d ' + arg }, startOptions), 20);
cmd[cmd.length - 2].should.eql('-d');
cmd[cmd.length - 1].should.eql(arg);
});
it('should parse optionalIntentArguments with multiple arguments with hyphens', function () {
var arg1 = 'http://some-url-with-hyphens.com/';
var arg2 = 'http://some-other-url-with-hyphens.com/';
var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({
optionalIntentArguments: '-d ' + arg1 + ' -e key ' + arg2
}, startOptions), 20);
cmd[cmd.length - 5].should.eql('-d');
cmd[cmd.length - 4].should.eql(arg1);
cmd[cmd.length - 3].should.eql('-e');
cmd[cmd.length - 2].should.eql('key');
cmd[cmd.length - 1].should.eql(arg2);
});
it('should have -S option when stopApp is set', function callee$2$0() {
var cmd;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ stopApp: true }, startOptions), 20);
cmd[cmd.length - 1].should.eql('-S');
case 2:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should not have -S option when stopApp is not set', function callee$2$0() {
var cmd;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ stopApp: false }, startOptions), 20);
cmd[cmd.length - 1].should.not.eql('-S');
case 2:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdW5pdC9oZWxwZXItc3BlY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OzswQkFDOEIsbUJBQW1COztpQ0FDdkIscUJBQXFCOzs2QkFDNUIsZ0JBQWdCOztvQkFDbEIsTUFBTTs7OztvQkFDTixNQUFNOzs7O3NCQUNULFFBQVE7Ozs7QUFHdEIsSUFBTSxNQUFNLEdBQUcsa0JBQUssTUFBTSxDQUFDOztBQUUzQixRQUFRLENBQUMsU0FBUyxFQUFFLFlBQU07QUFDeEIsVUFBUSxDQUFDLDBCQUEwQixFQUFFLFlBQU07QUFDekMsTUFBRSxDQUFDLG9EQUFvRCxFQUFFLFlBQU07QUFDN0QsZ0RBQXlCLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUNqRCxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDckMsQ0FBQyxDQUFDO0FBQ0gsTUFBRSxDQUFDLGlEQUFpRCxFQUFFLFlBQU07QUFDMUQsZ0RBQXlCLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNoQyxDQUFDLENBQUM7QUFDSCxNQUFFLENBQUMsd0NBQXdDLEVBQUUsWUFBTTtBQUNqRCxnREFBeUIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQzlDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNyQyxDQUFDLENBQUM7QUFDSCxNQUFFLENBQUMsd0VBQXdFLEVBQUUsWUFBTTtBQUNqRixnREFBeUIseUNBQXlDLEVBQUUscURBQXFELENBQUMsQ0FDdkgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQzFFLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQzs7QUFFSCxVQUFRLENBQUMsZ0JBQWdCLEVBQUUsa0NBQVUsRUFBQyxFQUFFLG1CQUFBLEVBQUMsRUFBRSxVQUFDLEtBQUssRUFBSztBQUNwRCxNQUFFLENBQUMsNkJBQTZCLEVBQUU7VUFD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QUU7VUFDbEQsR0FBRzs7OztBQUFILGVBQUcsR0FBRywrQkFBYyxvQkFBRSxRQUFRLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDOztBQUN2RSxlQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7OztLQUN4QyxDQUFDLENBQUM7R0FDSixDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMiLCJmaWxlIjoidGVzdC91bml0L2hlbHBlci1zcGVjcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFBvc3NpYmxlQWN0aXZpdHlOYW1lcywgZ2V0RGlyZWN0b3JpZXMsIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsXHJcbiAgICAgICAgIGJ1aWxkU3RhcnRDbWQgfSBmcm9tICcuLi8uLi9saWIvaGVscGVycyc7XHJcbmltcG9ydCB7IHdpdGhNb2NrcyB9IGZyb20gJ2FwcGl1bS10ZXN0LXN1cHBvcnQnO1xyXG5pbXBvcnQgeyBmcyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBjaGFpIGZyb20gJ2NoYWknO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5cclxuXHJcbmNvbnN0IHNob3VsZCA9IGNoYWkuc2hvdWxkO1xyXG5cclxuZGVzY3JpYmUoJ2hlbHBlcnMnLCAoKSA9PiB7XHJcbiAgZGVzY3JpYmUoJ2dldFBvc3NpYmxlQWN0aXZpdHlOYW1lcycsICgpID0+IHtcclxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHJlbW92ZSBwa2cgZnJvbSBwa2cuYWN0aXZpdHkubmFtZScsICgpID0+IHtcclxuICAgICAgZ2V0UG9zc2libGVBY3Rpdml0eU5hbWVzKCdwa2cnLCAncGtnLmFjdGl2aXR5Lm5hbWUnKVxyXG4gICAgICAgIC5zaG91bGQuaW5jbHVkZSgnLmFjdGl2aXR5Lm5hbWUnKTtcclxuICAgIH0pO1xyXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gLmFjdC5uYW1lIHdoZW4gYWN0Lm5hbWUgaXMgcGFzc2VkJywgKCkgPT4ge1xyXG4gICAgICBnZXRQb3NzaWJsZUFjdGl2aXR5TmFtZXMoJ3BrZycsICdhY3QubmFtZScpXHJcbiAgICAgICAgLnNob3VsZC5pbmNsdWRlKCcuYWN0Lm5hbWUnKTtcclxuICAgIH0pO1xyXG4gICAgaXQoJ3Nob3VsZCBub3QgYW1lbmQgYSB2YWxpZCBhY3Rpdml0eSBuYW1lJywgKCkgPT4ge1xyXG4gICAgICBnZXRQb3NzaWJsZUFjdGl2aXR5TmFtZXMoJ3BrZycsICcuYWN0aXZpdHkubmFtZScpXHJcbiAgICAgICAgLnNob3VsZC5pbmNsdWRlKCcuYWN0aXZpdHkubmFtZScpO1xyXG4gICAgfSk7XHJcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBjYXNlIHdoZXJlIGFwcGxpY2F0aW9uIGlkIGlzIGRpZmZlcmVudCBmcm9tIHBhY2thZ2UgbmFtZScsICgpID0+IHtcclxuICAgICAgZ2V0UG9zc2libGVBY3Rpdml0eU5hbWVzKCdjb20uZ2EuYWFhLmFuZHJvaWQuYmJiLmFjdGl2aXRpZXMubG9jYWwnLCAnY29tLmdhLmFhYS5hbmRyb2lkLmJiYi5hY3Rpdml0eS5GaXJzdExhdW5jaEFjdGl2aXR5JylcclxuICAgICAgICAuc2hvdWxkLmluY2x1ZGUoJ2NvbS5nYS5hYWEuYW5kcm9pZC5iYmIuYWN0aXZpdHkuRmlyc3RMYXVuY2hBY3Rpdml0eScpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGRlc2NyaWJlKCdnZXREaXJlY3RvcmllcycsIHdpdGhNb2Nrcyh7ZnN9LCAobW9ja3MpID0+IHtcclxuICAgIGl0KCdzaG91bGQgc29ydCB0aGUgZGlyZWN0b3JpZXMnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGxldCByb290UGF0aCA9ICcvcGF0aC90by9yb290JztcclxuICAgICAgbGV0IGRpcmVjdG9yaWVzID0gWydjJywgJ2InLCAnYScsICcxJywgJzInXTtcclxuICAgICAgbW9ja3MuZnMuZXhwZWN0cygncmVhZGRpcicpXHJcbiAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKHJvb3RQYXRoKVxyXG4gICAgICAgIC5yZXR1cm5zKGRpcmVjdG9yaWVzKTtcclxuICAgICAgbW9ja3MuZnMuZXhwZWN0cygnbHN0YXQnKVxyXG4gICAgICAgIC5leGFjdGx5KDUpXHJcbiAgICAgICAgLnJldHVybnMoUHJvbWlzZS5yZXNvbHZlKHtpc0RpcmVjdG9yeTogKCkgPT4ge3JldHVybiB0cnVlO319KSk7XHJcbiAgICAgIChhd2FpdCBnZXREaXJlY3Rvcmllcyhyb290UGF0aCkpLnNob3VsZC5lcWwoWycxJywgJzInLCAnYScsICdiJywgJ2MnXSk7XHJcbiAgICAgIG1vY2tzLmZzLnZlcmlmeSgpO1xyXG4gICAgfSk7XHJcbiAgfSkpO1xyXG5cclxuICBkZXNjcmliZSgnZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCcsIHdpdGhNb2Nrcyh7ZnMsIHBhdGh9LCAobW9ja3MpID0+IHtcclxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgaWYgbm8gQU5EUk9JRF9IT01FIGlzIHNldCcsIGFzeW5jICgpID0+IHtcclxuICAgICAgc2hvdWxkKGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgoKSkubm90LmV4aXN0O1xyXG4gICAgfSk7XHJcbiAgICBpdCgnc2hvdWxkIGdldCB0aGUgbGF0ZXN0IGF2YWlsYWJsZSBBUEknLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGxldCBvbGRBbmRyb2lkSG9tZSA9IHByb2Nlc3MuZW52LkFORFJPSURfSE9NRTtcclxuICAgICAgcHJvY2Vzcy5lbnYuQU5EUk9JRF9IT01FID0gJy9wYXRoL3RvL2FuZHJvaWQvaG9tZSc7XHJcbiAgICAgIG1vY2tzLmZzLmV4cGVjdHMoJ2V4aXN0cycpXHJcbiAgICAgICAgLmV4YWN0bHkoMilcclxuICAgICAgICAub25DYWxsKDApLnJldHVybnMoZmFsc2UpXHJcbiAgICAgICAgLm9uQ2FsbCgxKS5yZXR1cm5zKHRydWUpO1xyXG4gICAgICBtb2Nrcy5wYXRoLmV4cGVjdHMoJ3Jlc29sdmUnKVxyXG4gICAgICAgIC5leGFjdGx5KDMpXHJcbiAgICAgICAgLm9uQ2FsbCgwKS5yZXR1cm5zKCcvcGF0aC90bycpXHJcbiAgICAgICAgLm9uQ2FsbCgxKS5yZXR1cm5zKCcvcGF0aC90by9hcGlzMScpXHJcbiAgICAgICAgLm9uQ2FsbCgyKS5yZXR1cm5zKCcvcGF0aC90by9hcGlzMicpO1xyXG5cclxuICAgICAgbGV0IHBsYXRmb3JtQW5kUGF0aCA9IGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgoKTtcclxuICAgICAgcGxhdGZvcm1BbmRQYXRoLnBsYXRmb3JtLnNob3VsZC5lcXVhbCgnYW5kcm9pZC0yMycpO1xyXG4gICAgICBwbGF0Zm9ybUFuZFBhdGgucGxhdGZvcm1QYXRoLnNob3VsZC5lcXVhbCgnL3BhdGgvdG8vYXBpczInKTtcclxuXHJcbiAgICAgIG1vY2tzLmZzLnZlcmlmeSgpO1xyXG4gICAgICBtb2Nrcy5wYXRoLnZlcmlmeSgpO1xyXG4gICAgICBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgPSBvbGRBbmRyb2lkSG9tZTtcclxuICAgIH0pO1xyXG4gIH0pKTtcclxuXHJcbiAgZGVzY3JpYmUoJ2J1aWxkU3RhcnRDbWQnLCAoKSA9PiB7XHJcbiAgICBsZXQgc3RhcnRPcHRpb25zID0ge1xyXG4gICAgICBwa2c6ICdjb20uc29tZXRoaW5nJyxcclxuICAgICAgYWN0aXZpdHk6ICcuU29tZUFjdGl2aXR5J1xyXG4gICAgfTtcclxuXHJcbiAgICBpdCgnc2hvdWxkIHBhcnNlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHdpdGggc2luZ2xlIGtleScsICgpID0+IHtcclxuICAgICAgbGV0IGNtZCA9IGJ1aWxkU3RhcnRDbWQoXy5kZWZhdWx0cyh7b3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6ICctZCBrZXknfSwgc3RhcnRPcHRpb25zKSwgMjApO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCctZCcpO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC0xXS5zaG91bGQuZXFsKCdrZXknKTtcclxuICAgIH0pO1xyXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIHNpbmdsZSBrZXkvdmFsdWUgcGFpcicsICgpID0+IHtcclxuICAgICAgbGV0IGNtZCA9IGJ1aWxkU3RhcnRDbWQoXy5kZWZhdWx0cyh7b3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6ICctZCBrZXkgdmFsdWUnfSwgc3RhcnRPcHRpb25zKSwgMjApO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC0zXS5zaG91bGQuZXFsKCctZCcpO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCdrZXknKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtMV0uc2hvdWxkLmVxbCgndmFsdWUnKTtcclxuICAgIH0pO1xyXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIHNpbmdsZSBrZXkvdmFsdWUgcGFpciB3aXRoIHNwYWNlcycsICgpID0+IHtcclxuICAgICAgbGV0IGNtZCA9IGJ1aWxkU3RhcnRDbWQoXy5kZWZhdWx0cyh7b3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6ICctZCBrZXkgdmFsdWUgdmFsdWUyJ30sIHN0YXJ0T3B0aW9ucyksIDIwKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtM10uc2hvdWxkLmVxbCgnLWQnKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtMl0uc2hvdWxkLmVxbCgna2V5Jyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTFdLnNob3VsZC5lcWwoJ3ZhbHVlIHZhbHVlMicpO1xyXG4gICAgfSk7XHJcbiAgICBpdCgnc2hvdWxkIHBhcnNlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHdpdGggbXVsdGlwbGUga2V5cycsICgpID0+IHtcclxuICAgICAgbGV0IGNtZCA9IGJ1aWxkU3RhcnRDbWQoXy5kZWZhdWx0cyh7b3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6ICctZCBrZXkxIC1lIGtleTInfSwgc3RhcnRPcHRpb25zKSwgMjApO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC00XS5zaG91bGQuZXFsKCctZCcpO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC0zXS5zaG91bGQuZXFsKCdrZXkxJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTJdLnNob3VsZC5lcWwoJy1lJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTFdLnNob3VsZC5lcWwoJ2tleTInKTtcclxuICAgIH0pO1xyXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIG11bHRpcGxlIGtleS92YWx1ZSBwYWlycycsICgpID0+IHtcclxuICAgICAgbGV0IGNtZCA9IGJ1aWxkU3RhcnRDbWQoXy5kZWZhdWx0cyh7b3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6ICctZCBrZXkxIHZhbHVlMSAtZSBrZXkyIHZhbHVlMid9LCBzdGFydE9wdGlvbnMpLCAyMCk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTZdLnNob3VsZC5lcWwoJy1kJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTVdLnNob3VsZC5lcWwoJ2tleTEnKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtNF0uc2hvdWxkLmVxbCgndmFsdWUxJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTNdLnNob3VsZC5lcWwoJy1lJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTJdLnNob3VsZC5lcWwoJ2tleTInKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtMV0uc2hvdWxkLmVxbCgndmFsdWUyJyk7XHJcbiAgICB9KTtcclxuICAgIGl0KCdzaG91bGQgcGFyc2Ugb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgd2l0aCBoeXBoZW5zJywgKCkgPT4ge1xyXG4gICAgICBsZXQgYXJnID0gJ2h0dHA6Ly9zb21lLXVybC13aXRoLWh5cGhlbnMuY29tLyc7XHJcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe29wdGlvbmFsSW50ZW50QXJndW1lbnRzOiBgLWQgJHthcmd9YH0sIHN0YXJ0T3B0aW9ucyksIDIwKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtMl0uc2hvdWxkLmVxbCgnLWQnKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtMV0uc2hvdWxkLmVxbChhcmcpO1xyXG4gICAgfSk7XHJcbiAgICBpdCgnc2hvdWxkIHBhcnNlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHdpdGggbXVsdGlwbGUgYXJndW1lbnRzIHdpdGggaHlwaGVucycsICgpID0+IHtcclxuICAgICAgbGV0IGFyZzEgPSAnaHR0cDovL3NvbWUtdXJsLXdpdGgtaHlwaGVucy5jb20vJztcclxuICAgICAgbGV0IGFyZzIgPSAnaHR0cDovL3NvbWUtb3RoZXItdXJsLXdpdGgtaHlwaGVucy5jb20vJztcclxuICAgICAgbGV0IGNtZCA9IGJ1aWxkU3RhcnRDbWQoXy5kZWZhdWx0cyh7XHJcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IGAtZCAke2FyZzF9IC1lIGtleSAke2FyZzJ9YFxyXG4gICAgICB9LCBzdGFydE9wdGlvbnMpLCAyMCk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTVdLnNob3VsZC5lcWwoJy1kJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTRdLnNob3VsZC5lcWwoYXJnMSk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTNdLnNob3VsZC5lcWwoJy1lJyk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTJdLnNob3VsZC5lcWwoJ2tleScpO1xyXG4gICAgICBjbWRbY21kLmxlbmd0aC0xXS5zaG91bGQuZXFsKGFyZzIpO1xyXG4gICAgfSk7XHJcbiAgICBpdCgnc2hvdWxkIGhhdmUgLVMgb3B0aW9uIHdoZW4gc3RvcEFwcCBpcyBzZXQnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe3N0b3BBcHA6IHRydWV9LCBzdGFydE9wdGlvbnMpLCAyMCk7XHJcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTFdLnNob3VsZC5lcWwoJy1TJyk7XHJcbiAgICB9KTtcclxuICAgIGl0KCdzaG91bGQgbm90IGhhdmUgLVMgb3B0aW9uIHdoZW4gc3RvcEFwcCBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY21kID0gYnVpbGRTdGFydENtZChfLmRlZmF1bHRzKHtzdG9wQXBwOiBmYWxzZX0sIHN0YXJ0T3B0aW9ucyksIDIwKTtcclxuICAgICAgY21kW2NtZC5sZW5ndGgtMV0uc2hvdWxkLm5vdC5lcWwoJy1TJyk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiLi5cXC4uXFwuLiJ9
;