@anyakichi/cdk-rsync-backup 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/rsync-backup.sh +65 -52
- package/lib/index.d.ts +1 -0
- package/lib/index.js +15 -4
- package/package.json +1 -1
package/assets/rsync-backup.sh
CHANGED
|
@@ -15,81 +15,94 @@ main() {
|
|
|
15
15
|
local device="$3"
|
|
16
16
|
local name="backup-$1"
|
|
17
17
|
local mnt="/srv/rsync-backup/mnt/$host"
|
|
18
|
-
local
|
|
18
|
+
local logfile="/srv/rsync-backup/rsync-backup.$host.log"
|
|
19
|
+
local args logfile_gz s3base snapshot_id timestamp volume_id
|
|
19
20
|
|
|
20
21
|
timestamp="$(date -u "+%Y%m%dT%H%MZ")"
|
|
21
22
|
s3base=s3://$S3_LOGS_BUCKET/RsyncBackupLogs/$(date -u "+%Y/%m/%d")/
|
|
23
|
+
logfile_gz="/srv/rsync-backup/RsyncBackup-$host-$timestamp.log.gz"
|
|
22
24
|
|
|
23
25
|
volume_id=$(aws ec2 describe-volumes \
|
|
24
26
|
--filter "Name=tag:Name,Values=$name" \
|
|
25
27
|
--query "Volumes[].VolumeId" --output text)
|
|
26
|
-
if [ -n "$volume_id" ]; then
|
|
27
|
-
# Data volume already exists.
|
|
28
|
-
echo backup volume already exists
|
|
29
|
-
exit 1
|
|
30
|
-
fi
|
|
31
28
|
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
args+=(--snapshot-id "$snapshot_id")
|
|
41
|
-
else
|
|
42
|
-
args+=(--size "$size")
|
|
43
|
-
fi
|
|
44
|
-
volume_id=$(aws ec2 create-volume --availability-zone "$INSTANCE_AZ" \
|
|
45
|
-
--encrypted --volume-type gp3 \
|
|
46
|
-
--tag-specifications "ResourceType=volume,Tags=[{Key=Name,Value=$name}]" \
|
|
47
|
-
--query VolumeId --output text "${args[@]}")
|
|
48
|
-
|
|
49
|
-
aws ec2 wait volume-available --volume-ids "$volume_id"
|
|
50
|
-
aws ec2 attach-volume --volume-id "$volume_id" \
|
|
51
|
-
--instance-id "$INSTANCE_ID" --device "$device" &>/dev/null
|
|
52
|
-
|
|
53
|
-
while true; do
|
|
54
|
-
if [[ -e $device ]]; then
|
|
55
|
-
break
|
|
29
|
+
# If volume is already mounted, previous rsync should be failed. Use
|
|
30
|
+
# the mounted volume in this case.
|
|
31
|
+
# If volume is not mounted, create and attach a volume and mount it.
|
|
32
|
+
if ! mountpoint -q "$mnt"; then
|
|
33
|
+
if [[ -n $volume_id ]]; then
|
|
34
|
+
# Data volume already exists.
|
|
35
|
+
echo backup volume already exists
|
|
36
|
+
exit 1
|
|
56
37
|
fi
|
|
57
|
-
sleep 1
|
|
58
|
-
done
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
# Get the latest snapshot ID.
|
|
40
|
+
snapshot_id=$(aws ec2 describe-snapshots --owner-ids self \
|
|
41
|
+
--filter "Name=tag:Name,Values=$name" \
|
|
42
|
+
--query "reverse(sort_by(Snapshots,&StartTime))[0].SnapshotId" \
|
|
43
|
+
--output text)
|
|
44
|
+
|
|
45
|
+
args=()
|
|
46
|
+
if [[ $snapshot_id != None ]]; then
|
|
47
|
+
args+=(--snapshot-id "$snapshot_id")
|
|
48
|
+
else
|
|
49
|
+
args+=(--size "$size")
|
|
50
|
+
fi
|
|
51
|
+
volume_id=$(aws ec2 create-volume --availability-zone "$INSTANCE_AZ" \
|
|
52
|
+
--encrypted --volume-type gp3 \
|
|
53
|
+
--tag-specifications "ResourceType=volume,Tags=[{Key=Name,Value=$name}]" \
|
|
54
|
+
--query VolumeId --output text "${args[@]}")
|
|
55
|
+
|
|
56
|
+
aws ec2 wait volume-available --volume-ids "$volume_id"
|
|
57
|
+
aws ec2 attach-volume --volume-id "$volume_id" \
|
|
58
|
+
--instance-id "$INSTANCE_ID" --device "$device" &>/dev/null
|
|
59
|
+
|
|
60
|
+
while true; do
|
|
61
|
+
if [[ -e $device ]]; then
|
|
62
|
+
break
|
|
63
|
+
fi
|
|
64
|
+
sleep 1
|
|
65
|
+
done
|
|
66
|
+
|
|
67
|
+
mkdir -p "$mnt"
|
|
68
|
+
if [[ $snapshot_id == None ]]; then
|
|
69
|
+
mkfs.ext4 -q "$device"
|
|
70
|
+
fi
|
|
71
|
+
mount "$device" "$mnt"
|
|
63
72
|
fi
|
|
64
|
-
mount "$device" "$mnt"
|
|
65
73
|
|
|
66
74
|
mkdir -p "$mnt/$host"
|
|
67
75
|
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
df -h "$device" >>"$logfile"
|
|
77
|
+
|
|
78
|
+
rsync --server --daemon --config="/srv/rsync-backup/rsyncd.$host.conf" .
|
|
79
|
+
|
|
80
|
+
df -h "$device" >>"$logfile"
|
|
70
81
|
|
|
71
82
|
umount "$mnt"
|
|
72
83
|
|
|
73
84
|
aws ec2 detach-volume --volume-id "$volume_id" &>/dev/null
|
|
74
85
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
--query SnapshotId --output text)
|
|
86
|
+
snapshot_id=$(aws ec2 create-snapshot --volume-id "$volume_id" \
|
|
87
|
+
--description "$name-$timestamp" \
|
|
88
|
+
--tag-specifications "ResourceType=snapshot,Tags=[{Key=Name,Value=$name}]" \
|
|
89
|
+
--query SnapshotId --output text)
|
|
80
90
|
|
|
81
|
-
|
|
82
|
-
gzip -c "/srv/rsync-backup/rsync-backup.$host.log" >"$logfile_gz"
|
|
91
|
+
gzip -c "$logfile" >"$logfile_gz"
|
|
83
92
|
|
|
84
|
-
|
|
93
|
+
aws s3 cp "$logfile_gz" "$s3base"
|
|
85
94
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
aws ec2 wait snapshot-completed --snapshot-ids "$snapshot_id"
|
|
89
|
-
fi
|
|
95
|
+
rm -f "$logfile" "$logfile_gz"
|
|
90
96
|
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
(
|
|
98
|
+
while true; do
|
|
99
|
+
aws ec2 wait snapshot-completed --snapshot-ids "$snapshot_id" &&
|
|
100
|
+
break
|
|
101
|
+
done
|
|
102
|
+
aws ec2 wait volume-available --volume-ids "$volume_id"
|
|
103
|
+
aws ec2 delete-volume --volume-id "$volume_id"
|
|
104
|
+
) &>/dev/null &
|
|
105
|
+
disown
|
|
93
106
|
}
|
|
94
107
|
|
|
95
108
|
main "$@"
|
package/lib/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface RsyncBackupProps {
|
|
|
14
14
|
readonly securityGroup?: ec2.ISecurityGroup;
|
|
15
15
|
readonly instanceType?: ec2.InstanceType;
|
|
16
16
|
readonly init?: ec2.CloudFormationInit;
|
|
17
|
+
readonly useEIP?: boolean;
|
|
17
18
|
readonly logsBucket?: s3.IBucket;
|
|
18
19
|
}
|
|
19
20
|
export declare class RsyncBackup extends Construct {
|
package/lib/index.js
CHANGED
|
@@ -10,7 +10,7 @@ const path = require("path");
|
|
|
10
10
|
class RsyncBackup extends constructs_1.Construct {
|
|
11
11
|
constructor(scope, id, props = {}) {
|
|
12
12
|
super(scope, id);
|
|
13
|
-
const
|
|
13
|
+
const logsBucket = props.logsBucket ||
|
|
14
14
|
new s3.Bucket(this, "LogsBucket", {
|
|
15
15
|
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
16
16
|
});
|
|
@@ -30,6 +30,9 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
30
30
|
ec2.InstanceType.of(ec2.InstanceClass.T4G, ec2.InstanceSize.NANO);
|
|
31
31
|
const machineImage = new ec2.AmazonLinuxImage({
|
|
32
32
|
generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
|
|
33
|
+
cpuType: instanceType.architecture == ec2.InstanceArchitecture.X86_64
|
|
34
|
+
? ec2.AmazonLinuxCpuType.X86_64
|
|
35
|
+
: ec2.AmazonLinuxCpuType.ARM_64,
|
|
33
36
|
});
|
|
34
37
|
const policy = new iam.PolicyDocument({
|
|
35
38
|
statements: [
|
|
@@ -50,7 +53,7 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
50
53
|
}),
|
|
51
54
|
new iam.PolicyStatement({
|
|
52
55
|
actions: ["s3:PutObject", "s3:PutObjectAcl"],
|
|
53
|
-
resources: [
|
|
56
|
+
resources: [logsBucket.bucketArn, logsBucket.bucketArn + "/*"],
|
|
54
57
|
}),
|
|
55
58
|
],
|
|
56
59
|
});
|
|
@@ -65,7 +68,7 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
65
68
|
});
|
|
66
69
|
keyPair.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
|
|
67
70
|
const initConfig = new ec2.InitConfig([
|
|
68
|
-
ec2.InitFile.fromString("/etc/environment", `S3_LOGS_BUCKET=${
|
|
71
|
+
ec2.InitFile.fromString("/etc/environment", `S3_LOGS_BUCKET=${logsBucket.bucketName}`),
|
|
69
72
|
ec2.InitFile.fromAsset("/usr/local/bin/rsync-backup", path.join(__dirname, "../assets/rsync-backup.sh"), {
|
|
70
73
|
mode: "000755",
|
|
71
74
|
}),
|
|
@@ -120,7 +123,15 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
120
123
|
role,
|
|
121
124
|
init,
|
|
122
125
|
});
|
|
126
|
+
let eip, eIPAssociation;
|
|
127
|
+
if (props.useEIP) {
|
|
128
|
+
eip = new ec2.CfnEIP(this, "EIP");
|
|
129
|
+
eIPAssociation = new ec2.CfnEIPAssociation(this, "EIPAssociation", {
|
|
130
|
+
eip: eip.ref,
|
|
131
|
+
instanceId: instance.instanceId,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
123
134
|
}
|
|
124
135
|
}
|
|
125
136
|
exports.RsyncBackup = RsyncBackup;
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDZCQUE2QjtBQXNCN0IsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFDeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUEwQixFQUFFO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQ1YsS0FBSyxDQUFDLFVBQVU7WUFDaEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2hDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDekMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxHQUFHLEdBQ1AsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLElBQUksYUFBaUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7U0FDckM7YUFBTTtZQUNMLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtnQkFDM0QsR0FBRztnQkFDSCxnQkFBZ0IsRUFBRSxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxjQUFjLENBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUNoQixrQkFBa0IsQ0FDbkIsQ0FB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LENBQUMsSUFBSSxFQUFFO2dCQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ25CO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN0RDtRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFTCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFO1lBQ3RFLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3hDLEdBQUc7WUFDSCxhQUFhO1lBQ2IsWUFBWTtZQUNaLFlBQVk7WUFDWixJQUFJO1lBQ0osSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQW5LRCxrQ0FtS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSc3luY0JhY2t1cE1vZHVsZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3NoS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSc3luY0JhY2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgbW9kdWxlcz86IFJzeW5jQmFja3VwTW9kdWxlW107XG5cbiAgcmVhZG9ubHkgaW5zdGFuY2VJZD86IHN0cmluZztcblxuICByZWFkb25seSBrZXlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogZWMyLkluc3RhbmNlVHlwZTtcbiAgcmVhZG9ubHkgaW5pdD86IGVjMi5DbG91ZEZvcm1hdGlvbkluaXQ7XG5cbiAgcmVhZG9ubHkgbG9nc0J1Y2tldD86IHMzLklCdWNrZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSc3luY0JhY2t1cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSc3luY0JhY2t1cFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgYnVja2V0ID1cbiAgICAgIHByb3BzLmxvZ3NCdWNrZXQgfHxcbiAgICAgIG5ldyBzMy5CdWNrZXQodGhpcywgXCJMb2dzQnVja2V0XCIsIHtcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdnBjID1cbiAgICAgIHByb3BzLnZwYyB8fCBjZGsuYXdzX2VjMi5WcGMuZnJvbUxvb2t1cCh0aGlzLCBcIlZQQ1wiLCB7IGlzRGVmYXVsdDogdHJ1ZSB9KTtcblxuICAgIGxldCBzZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gICAgaWYgKHByb3BzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgIHNlY3VyaXR5R3JvdXAgPSBwcm9wcy5zZWN1cml0eUdyb3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICAgIHZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBlYzIuUGVlci5hbnlJcHY0KCksXG4gICAgICAgIGVjMi5Qb3J0LnRjcCgyMiksXG4gICAgICAgIFwiQWxsb3cgU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9XG4gICAgICBwcm9wcy5pbnN0YW5jZVR5cGUgfHxcbiAgICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuVDRHLCBlYzIuSW5zdGFuY2VTaXplLk5BTk8pO1xuXG4gICAgY29uc3QgbWFjaGluZUltYWdlID0gbmV3IGVjMi5BbWF6b25MaW51eEltYWdlKHtcbiAgICAgIGdlbmVyYXRpb246IGVjMi5BbWF6b25MaW51eEdlbmVyYXRpb24uQU1BWk9OX0xJTlVYXzIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVNuYXBzaG90c1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVZvbHVtZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJlYzI6QXR0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpEZXRhY2hWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGVsZXRlVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVTbmFwc2hvdFwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlVGFnc1wiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInMzOlB1dE9iamVjdFwiLCBcInMzOlB1dE9iamVjdEFjbFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtidWNrZXQuYnVja2V0QXJuLCBidWNrZXQuYnVja2V0QXJuICsgXCIvKlwiXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgcnN5bmNCYWNrdXA6IHBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IGVjMi5DZm5LZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICBrZXlOYW1lOiBcInJzeW5jLWJhY2t1cFwiLFxuICAgIH0pO1xuICAgIGtleVBhaXIuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgY29uc3QgaW5pdENvbmZpZyA9IG5ldyBlYzIuSW5pdENvbmZpZyhbXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbVN0cmluZyhcbiAgICAgICAgXCIvZXRjL2Vudmlyb25tZW50XCIsXG4gICAgICAgIGBTM19MT0dTX0JVQ0tFVD0ke2J1Y2tldC5idWNrZXROYW1lfWBcbiAgICAgICksXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICBcIi91c3IvbG9jYWwvYmluL3JzeW5jLWJhY2t1cFwiLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luYy1iYWNrdXAuc2hcIiksXG4gICAgICAgIHtcbiAgICAgICAgICBtb2RlOiBcIjAwMDc1NVwiLFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgXCIvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuaW5jXCIsXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5pbmNcIilcbiAgICAgICksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvcHMubW9kdWxlcykge1xuICAgICAgZm9yIChjb25zdCBbaSwgbV0gb2YgcHJvcHMubW9kdWxlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKG0uc2l6ZSA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIobS5zaXplKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1vZHVsZSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGV2aWNlID0gU3RyaW5nLmZyb21DaGFyQ29kZShcImJcIi5jaGFyQ29kZUF0KDApICsgaSk7XG5cbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmNvbmZcIilcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5hcmd2Q29tbWFuZChbXG4gICAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgICAgXCItaVwiLFxuICAgICAgICAgICAgYHMvQGhvc3RALyR7bS5uYW1lfS9nYCxcbiAgICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgICBgZWNobyAnbm8tcG9ydC1mb3J3YXJkaW5nLG5vLWFnZW50LWZvcndhcmRpbmcsbm8tWDExLWZvcndhcmRpbmcsY29tbWFuZD1cInJzeW5jLWJhY2t1cCAke20ubmFtZX0gJHttLnNpemV9IC9kZXYvc2Qke2RldmljZX1cIiAke20uc3NoS2V5fScgPj4gL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNgXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgICBcIi9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZlwiLFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5jb25mXCIpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgIFwiLWlcIixcbiAgICAgICAgICBgcy9AaG9zdEAvYmFja3VwL2dgLFxuICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuYmFja3VwLmNvbmZgLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdENvbW1hbmQuYXJndkNvbW1hbmQoW1xuICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgXCItaVwiLFxuICAgICAgICAgICdzfGNvbW1hbmQ9XCIuKlwiIHxjb21tYW5kPVwicnN5bmMtYmFja3VwIGJhY2t1cCAxMDAgL2Rldi9zZGJcIiB8JyxcbiAgICAgICAgICBcIi9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzXCIsXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXQgPSAoKCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmluaXQpIHtcbiAgICAgICAgcHJvcHMuaW5pdC5hZGRDb25maWcoXCJyc3luY0JhY2t1cFwiLCBpbml0Q29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHByb3BzLmluaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWMyLkNsb3VkRm9ybWF0aW9uSW5pdC5mcm9tQ29uZmlnKGluaXRDb25maWcpO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgcHJvcHMuaW5zdGFuY2VJZCB8fCBcIkluc3RhbmNlXCIsIHtcbiAgICAgIGtleU5hbWU6IGNkay5Ub2tlbi5hc1N0cmluZyhrZXlQYWlyLnJlZiksXG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwLFxuICAgICAgaW5zdGFuY2VUeXBlLFxuICAgICAgbWFjaGluZUltYWdlLFxuICAgICAgcm9sZSxcbiAgICAgIGluaXQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDZCQUE2QjtBQXVCN0IsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFDeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUEwQixFQUFFO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLFVBQVU7WUFDaEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2hDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDekMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxHQUFHLEdBQ1AsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLElBQUksYUFBaUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7U0FDckM7YUFBTTtZQUNMLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtnQkFDM0QsR0FBRztnQkFDSCxnQkFBZ0IsRUFBRSxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxjQUFjLENBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUNoQixrQkFBa0IsQ0FDbkIsQ0FB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c0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBNb2R1bGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNzaEtleTogc3RyaW5nO1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG1vZHVsZXM/OiBSc3luY0JhY2t1cE1vZHVsZVtdO1xuXG4gIHJlYWRvbmx5IGluc3RhbmNlSWQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkga2V5TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IGVjMi5JbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGluaXQ/OiBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0O1xuICByZWFkb25seSB1c2VFSVA/OiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IGxvZ3NCdWNrZXQ/OiBzMy5JQnVja2V0O1xufVxuXG5leHBvcnQgY2xhc3MgUnN5bmNCYWNrdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnN5bmNCYWNrdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGxvZ3NCdWNrZXQgPVxuICAgICAgcHJvcHMubG9nc0J1Y2tldCB8fFxuICAgICAgbmV3IHMzLkJ1Y2tldCh0aGlzLCBcIkxvZ3NCdWNrZXRcIiwge1xuICAgICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCB2cGMgPVxuICAgICAgcHJvcHMudnBjIHx8IGNkay5hd3NfZWMyLlZwYy5mcm9tTG9va3VwKHRoaXMsIFwiVlBDXCIsIHsgaXNEZWZhdWx0OiB0cnVlIH0pO1xuXG4gICAgbGV0IHNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgc2VjdXJpdHlHcm91cCA9IHByb3BzLnNlY3VyaXR5R3JvdXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgICAgdnBjLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIGVjMi5QZWVyLmFueUlwdjQoKSxcbiAgICAgICAgZWMyLlBvcnQudGNwKDIyKSxcbiAgICAgICAgXCJBbGxvdyBTU0ggQWNjZXNzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID1cbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZSB8fFxuICAgICAgZWMyLkluc3RhbmNlVHlwZS5vZihlYzIuSW5zdGFuY2VDbGFzcy5UNEcsIGVjMi5JbnN0YW5jZVNpemUuTkFOTyk7XG5cbiAgICBjb25zdCBtYWNoaW5lSW1hZ2UgPSBuZXcgZWMyLkFtYXpvbkxpbnV4SW1hZ2Uoe1xuICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgIGNwdVR5cGU6XG4gICAgICAgIGluc3RhbmNlVHlwZS5hcmNoaXRlY3R1cmUgPT0gZWMyLkluc3RhbmNlQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgICAgICAgID8gZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5YODZfNjRcbiAgICAgICAgICA6IGVjMi5BbWF6b25MaW51eENwdVR5cGUuQVJNXzY0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZUluc3RhbmNlc1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVTbmFwc2hvdHNcIixcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVm9sdW1lc1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiZWMyOkF0dGFjaFZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGV0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkRlbGV0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlU25hcHNob3RcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVRhZ3NcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpQdXRPYmplY3RcIiwgXCJzMzpQdXRPYmplY3RBY2xcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbbG9nc0J1Y2tldC5idWNrZXRBcm4sIGxvZ3NCdWNrZXQuYnVja2V0QXJuICsgXCIvKlwiXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgcnN5bmNCYWNrdXA6IHBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IGVjMi5DZm5LZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICBrZXlOYW1lOiBcInJzeW5jLWJhY2t1cFwiLFxuICAgIH0pO1xuICAgIGtleVBhaXIuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgY29uc3QgaW5pdENvbmZpZyA9IG5ldyBlYzIuSW5pdENvbmZpZyhbXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbVN0cmluZyhcbiAgICAgICAgXCIvZXRjL2Vudmlyb25tZW50XCIsXG4gICAgICAgIGBTM19MT0dTX0JVQ0tFVD0ke2xvZ3NCdWNrZXQuYnVja2V0TmFtZX1gXG4gICAgICApLFxuICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9yc3luYy1iYWNrdXBcIixcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmMtYmFja3VwLnNoXCIpLFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZTogXCIwMDA3NTVcIixcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGVjMi5Jbml0RmlsZS5mcm9tQXNzZXQoXG4gICAgICAgIFwiL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmluY1wiLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luY2QuaW5jXCIpXG4gICAgICApLFxuICAgIF0pO1xuXG4gICAgaWYgKHByb3BzLm1vZHVsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgW2ksIG1dIG9mIHByb3BzLm1vZHVsZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChtLnNpemUgPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG0uc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2R1bGUgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRldmljZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoXCJiXCIuY2hhckNvZGVBdCgwKSArIGkpO1xuXG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0RmlsZS5mcm9tQXNzZXQoXG4gICAgICAgICAgICBgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLiR7bS5uYW1lfS5jb25mYCxcbiAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5jb25mXCIpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgICBlYzIuSW5pdENvbW1hbmQuYXJndkNvbW1hbmQoW1xuICAgICAgICAgICAgXCIvdXNyL2Jpbi9zZWRcIixcbiAgICAgICAgICAgIFwiLWlcIixcbiAgICAgICAgICAgIGBzL0Bob3N0QC8ke20ubmFtZX0vZ2AsXG4gICAgICAgICAgICBgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLiR7bS5uYW1lfS5jb25mYCxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgICBlYzIuSW5pdENvbW1hbmQuc2hlbGxDb21tYW5kKFxuICAgICAgICAgICAgYGVjaG8gJ25vLXBvcnQtZm9yd2FyZGluZyxuby1hZ2VudC1mb3J3YXJkaW5nLG5vLVgxMS1mb3J3YXJkaW5nLGNvbW1hbmQ9XCJyc3luYy1iYWNrdXAgJHttLm5hbWV9ICR7bS5zaXplfSAvZGV2L3NkJHtkZXZpY2V9XCIgJHttLnNzaEtleX0nID4+IC9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgIGVjMi5Jbml0RmlsZS5mcm9tQXNzZXQoXG4gICAgICAgICAgXCIvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuYmFja3VwLmNvbmZcIixcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luY2QuY29uZlwiKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5hcmd2Q29tbWFuZChbXG4gICAgICAgICAgXCIvdXNyL2Jpbi9zZWRcIixcbiAgICAgICAgICBcIi1pXCIsXG4gICAgICAgICAgYHMvQGhvc3RAL2JhY2t1cC9nYCxcbiAgICAgICAgICBgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmJhY2t1cC5jb25mYCxcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgIFwiLWlcIixcbiAgICAgICAgICAnc3xjb21tYW5kPVwiLipcIiB8Y29tbWFuZD1cInJzeW5jLWJhY2t1cCBiYWNrdXAgMTAwIC9kZXYvc2RiXCIgfCcsXG4gICAgICAgICAgXCIvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5c1wiLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0ID0gKCgpID0+IHtcbiAgICAgIGlmIChwcm9wcy5pbml0KSB7XG4gICAgICAgIHByb3BzLmluaXQuYWRkQ29uZmlnKFwicnN5bmNCYWNrdXBcIiwgaW5pdENvbmZpZyk7XG4gICAgICAgIHJldHVybiBwcm9wcy5pbml0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVjMi5DbG91ZEZvcm1hdGlvbkluaXQuZnJvbUNvbmZpZyhpbml0Q29uZmlnKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIHByb3BzLmluc3RhbmNlSWQgfHwgXCJJbnN0YW5jZVwiLCB7XG4gICAgICBrZXlOYW1lOiBjZGsuVG9rZW4uYXNTdHJpbmcoa2V5UGFpci5yZWYpLFxuICAgICAgdnBjLFxuICAgICAgc2VjdXJpdHlHcm91cCxcbiAgICAgIGluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZSxcbiAgICAgIHJvbGUsXG4gICAgICBpbml0LFxuICAgIH0pO1xuXG4gICAgbGV0IGVpcCwgZUlQQXNzb2NpYXRpb247XG4gICAgaWYgKHByb3BzLnVzZUVJUCkge1xuICAgICAgZWlwID0gbmV3IGVjMi5DZm5FSVAodGhpcywgXCJFSVBcIik7XG4gICAgICBlSVBBc3NvY2lhdGlvbiA9IG5ldyBlYzIuQ2ZuRUlQQXNzb2NpYXRpb24odGhpcywgXCJFSVBBc3NvY2lhdGlvblwiLCB7XG4gICAgICAgIGVpcDogZWlwLnJlZixcbiAgICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/package.json
CHANGED