UNPKG

angular-animations

Version:
178 lines 31.4 kB
import { animate, animation, AUTO_STYLE, keyframes, state, style, transition, trigger } from '@angular/animations'; import { useAnimationIncludingChildren } from '../common/use-animation-including-children'; import { animateIncludingChildren } from '../common/animate-including-children'; const DEFAULT_DURATION = 200; export function collapseAnimation(options) { return trigger((options && options.anchor) || 'collapse', [ state('1', style({ height: '0', visibility: 'hidden', overflow: 'hidden' })), state('0', style({ height: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden' })), transition('0 => 1', [...animateIncludingChildren('ease-in', options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }), transition('1 => 0', [...animateIncludingChildren('ease-out', options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function collapseHorizontallyAnimation(options) { return trigger((options && options.anchor) || 'collapseHorizontally', [ state('1', style({ width: '0', visibility: 'hidden', overflow: 'hidden' })), state('0', style({ width: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden' })), transition('0 => 1', [...animateIncludingChildren('ease-in', options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }), transition('1 => 0', [...animateIncludingChildren('ease-out', options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } const expand = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ height: '0', visibility: 'hidden', overflow: 'hidden', easing: 'ease-out', offset: 0 }), style({ height: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-out', offset: 1 }) ]))); const ɵ0 = expand; const expandRight = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ width: '0', visibility: 'hidden', overflow: 'hidden', easing: 'ease-out', offset: 0 }), style({ width: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-out', offset: 1 }) ]))); const ɵ1 = expandRight; const fadeInExpand = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ height: '0', opacity: 0, visibility: 'hidden', overflow: 'hidden', easing: 'ease-out', offset: 0 }), style({ height: AUTO_STYLE, opacity: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-out', offset: 1 }) ]))); const ɵ2 = fadeInExpand; const fadeInExpandRight = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ width: '0', opacity: 0, visibility: 'hidden', overflow: 'hidden', easing: 'ease-out', offset: 0 }), style({ width: AUTO_STYLE, opacity: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-out', offset: 1 }) ]))); const ɵ3 = fadeInExpandRight; const collapse = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ height: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-in', offset: 0 }), style({ height: '0', visibility: 'hidden', overflow: 'hidden', easing: 'ease-in', offset: 1 }) ]))); const ɵ4 = collapse; const collapseLeft = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ width: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-in', offset: 0 }), style({ width: '0', visibility: 'hidden', overflow: 'hidden', easing: 'ease-in', offset: 1 }) ]))); const ɵ5 = collapseLeft; const fadeOutCollapse = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ height: AUTO_STYLE, opacity: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-in', offset: 0 }), style({ height: '0', opacity: 0, visibility: 'hidden', overflow: 'hidden', easing: 'ease-in', offset: 1 }) ]))); const ɵ6 = fadeOutCollapse; const fadeOutCollapseLeft = () => animation(animate('{{duration}}ms {{delay}}ms', keyframes([ style({ width: AUTO_STYLE, opacity: AUTO_STYLE, visibility: AUTO_STYLE, overflow: 'hidden', easing: 'ease-in', offset: 0 }), style({ width: '0', opacity: 0, visibility: 'hidden', overflow: 'hidden', easing: 'ease-in', offset: 1 }) ]))); const ɵ7 = fadeOutCollapseLeft; export function expandOnEnterAnimation(options) { return trigger((options && options.anchor) || 'expandOnEnter', [ transition(':enter', animation([style({ visibility: 'hidden' }), ...useAnimationIncludingChildren(expand(), options)]), { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function expandRightOnEnterAnimation(options) { return trigger((options && options.anchor) || 'expandRightOnEnter', [ transition(':enter', animation([style({ visibility: 'hidden' }), ...useAnimationIncludingChildren(expandRight(), options)]), { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function collapseOnLeaveAnimation(options) { return trigger((options && options.anchor) || 'collapseOnLeave', [ transition(':leave', [...useAnimationIncludingChildren(collapse(), options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function collapseLeftOnLeaveAnimation(options) { return trigger((options && options.anchor) || 'collapseLeftOnLeave', [ transition(':leave', [...useAnimationIncludingChildren(collapseLeft(), options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function fadeInExpandOnEnterAnimation(options) { return trigger((options && options.anchor) || 'fadeInExpandOnEnter', [ transition(':enter', animation([style({ visibility: 'hidden' }), ...useAnimationIncludingChildren(fadeInExpand(), options)]), { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function fadeInExpandRightOnEnterAnimation(options) { return trigger((options && options.anchor) || 'fadeInExpandRightOnEnter', [ transition(':enter', animation([style({ visibility: 'hidden' }), ...useAnimationIncludingChildren(fadeInExpandRight(), options)]), { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function fadeOutCollapseOnLeaveAnimation(options) { return trigger((options && options.anchor) || 'fadeOutCollapseOnLeave', [ transition(':leave', [...useAnimationIncludingChildren(fadeOutCollapse(), options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export function fadeOutCollapseLeftOnLeaveAnimation(options) { return trigger((options && options.anchor) || 'fadeOutCollapseLeftOnLeave', [ transition(':leave', [...useAnimationIncludingChildren(fadeOutCollapseLeft(), options)], { params: { delay: (options && options.delay) || 0, duration: (options && options.duration) || DEFAULT_DURATION } }) ]); } export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UuYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL290aGVyL2NvbGxhcHNlLmFuaW1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxVQUFVLEVBQ1YsU0FBUyxFQUNULEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWhGLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBRTdCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUEyQjtJQUMzRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQ3hELEtBQUssQ0FDSCxHQUFHLEVBQ0gsS0FBSyxDQUFDO1lBQ0osTUFBTSxFQUFFLEdBQUc7WUFDWCxVQUFVLEVBQUUsUUFBUTtZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQ0g7UUFDRCxLQUFLLENBQ0gsR0FBRyxFQUNILEtBQUssQ0FBQztZQUNKLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FDSDtRQUNELFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO1lBQ3RFLE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLFFBQVEsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMs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LFNBQVMsQ0FBQztJQUNSLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZHLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQy9GLENBQUMsQ0FDSCxDQUNGLENBQUM7O0FBRUosTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQ3hCLFNBQVMsQ0FDUCxPQUFPLENBQ0wsNEJBQTRCLEVBQzVCLFNBQVMsQ0FBQztJQUNSLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3RHLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGLENBQUMsQ0FDSCxDQUNGLENBQUM7O0FBRUosTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFLENBQzNCLFNBQVMsQ0FDUCxPQUFPLENBQ0wsNEJBQTRCLEVBQzVCLFNBQVMsQ0FBQztJQUNSLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDNUgsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFF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RSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDdEMsUUFBUSxFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0I7YUFDNUQ7U0FDRixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFuaW1hdGUsXG4gIGFuaW1hdGlvbixcbiAgQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhLFxuICBBVVRPX1NUWUxFLFxuICBrZXlmcmFtZXMsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuaW1wb3J0IHsgSUFuaW1hdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9jb21tb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB1c2VBbmltYXRpb25JbmNsdWRpbmdDaGlsZHJlbiB9IGZyb20gJy4uL2NvbW1vbi91c2UtYW5pbWF0aW9uLWluY2x1ZGluZy1jaGlsZHJlbic7XG5pbXBvcnQgeyBhbmltYXRlSW5jbHVkaW5nQ2hpbGRyZW4gfSBmcm9tICcuLi9jb21tb24vYW5pbWF0ZS1pbmNsdWRpbmctY2hpbGRyZW4nO1xuXG5jb25zdCBERUZBVUxUX0RVUkFUSU9OID0gMjAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY29sbGFwc2VBbmltYXRpb24ob3B0aW9ucz86IElBbmltYXRpb25PcHRpb25zKTogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhIHtcbiAgcmV0dXJuIHRyaWdnZXIoKG9wdGlvbnMgJiYgb3B0aW9ucy5hbmNob3IpIHx8ICdjb2xsYXBzZScsIFtcbiAgICBzdGF0ZShcbiAgICAgICcxJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgaGVpZ2h0OiAnMCcsXG4gICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICAgIH0pXG4gICAgKSxcbiAgICBzdGF0ZShcbiAgICAgICcwJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgaGVpZ2h0OiBBVVRPX1NUWUxFLFxuICAgICAgICB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFLFxuICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0cmFuc2l0aW9uKCcwID0+IDEnLCBbLi4uYW5pbWF0ZUluY2x1ZGluZ0NoaWxkcmVuKCdlYXNlLWluJywgb3B0aW9ucyldLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZGVsYXk6IChvcHRpb25zICYmIG9wdGlvbnMuZGVsYXkpIHx8IDAsXG4gICAgICAgIGR1cmF0aW9uOiAob3B0aW9ucyAmJiBvcHRpb25zLmR1cmF0aW9uKSB8fCBERUZBVUxUX0RVUkFUSU9OXG4gICAgICB9XG4gICAgfSksXG4gICAgdHJhbnNpdGlvbignMSA9PiAwJywgWy4uLmFuaW1hdGVJbmNsdWRpbmdDaGlsZHJlbignZWFzZS1vdXQnLCBvcHRpb25zKV0sIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBkZWxheTogKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxheSkgfHwgMCxcbiAgICAgICAgZHVyYXRpb246IChvcHRpb25zICYmIG9wdGlvbnMuZHVyYXRpb24pIHx8IERFRkFVTFRfRFVSQVRJT05cbiAgICAgIH1cbiAgICB9KVxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxhcHNlSG9yaXpvbnRhbGx5QW5pbWF0aW9uKG9wdGlvbnM/OiBJQW5pbWF0aW9uT3B0aW9ucyk6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSB7XG4gIHJldHVybiB0cmlnZ2VyKChvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yKSB8fCAnY29sbGFwc2VIb3Jpem9udGFsbHknLCBbXG4gICAgc3RhdGUoXG4gICAgICAnMScsXG4gICAgICBzdHlsZSh7XG4gICAgICAgIHdpZHRoOiAnMCcsXG4gICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICAgIH0pXG4gICAgKSxcbiAgICBzdGF0ZShcbiAgICAgICcwJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgd2lkdGg6IEFVVE9fU1RZTEUsXG4gICAgICAgIHZpc2liaWxpdHk6IEFVVE9fU1RZTEUsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgfSlcbiAgICApLFxuICAgIHRyYW5zaXRpb24oJzAgPT4gMScsIFsuLi5hbmltYXRlSW5jbHVkaW5nQ2hpbGRyZW4oJ2Vhc2UtaW4nLCBvcHRpb25zKV0sIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBkZWxheTogKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxheSkgfHwgMCxcbiAgICAgICAgZHVyYXRpb246IChvcHRpb25zICYmIG9wdGlvbnMuZHVyYXRpb24pIHx8IERFRkFVTFRfRFVSQVRJT05cbiAgICAgIH1cbiAgICB9KSxcbiAgICB0cmFuc2l0aW9uKCcxID0+IDAnLCBbLi4uYW5pbWF0ZUluY2x1ZGluZ0NoaWxkcmVuKCdlYXNlLW91dCcsIG9wdGlvbnMpXSwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGRlbGF5OiAob3B0aW9ucyAmJiBvcHRpb25zLmRlbGF5KSB8fCAwLFxuICAgICAgICBkdXJhdGlvbjogKG9wdGlvbnMgJiYgb3B0aW9ucy5kdXJhdGlvbikgfHwgREVGQVVMVF9EVVJBVElPTlxuICAgICAgfVxuICAgIH0pXG4gIF0pO1xufVxuXG5jb25zdCBleHBhbmQgPSAoKSA9PlxuICBhbmltYXRpb24oXG4gICAgYW5pbWF0ZShcbiAgICAgICd7e2R1cmF0aW9ufX1tcyB7e2RlbGF5fX1tcycsXG4gICAgICBrZXlmcmFtZXMoW1xuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJywgb3ZlcmZsb3c6ICdoaWRkZW4nLCBlYXNpbmc6ICdlYXNlLW91dCcsIG9mZnNldDogMCB9KSxcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6IEFVVE9fU1RZTEUsIHZpc2liaWxpdHk6IEFVVE9fU1RZTEUsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1vdXQnLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5jb25zdCBleHBhbmRSaWdodCA9ICgpID0+XG4gIGFuaW1hdGlvbihcbiAgICBhbmltYXRlKFxuICAgICAgJ3t7ZHVyYXRpb259fW1zIHt7ZGVsYXl9fW1zJyxcbiAgICAgIGtleWZyYW1lcyhbXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6ICcwJywgdmlzaWJpbGl0eTogJ2hpZGRlbicsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1vdXQnLCBvZmZzZXQ6IDAgfSksXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6IEFVVE9fU1RZTEUsIHZpc2liaWxpdHk6IEFVVE9fU1RZTEUsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1vdXQnLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5jb25zdCBmYWRlSW5FeHBhbmQgPSAoKSA9PlxuICBhbmltYXRpb24oXG4gICAgYW5pbWF0ZShcbiAgICAgICd7e2R1cmF0aW9ufX1tcyB7e2RlbGF5fX1tcycsXG4gICAgICBrZXlmcmFtZXMoW1xuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzAnLCBvcGFjaXR5OiAwLCB2aXNpYmlsaXR5OiAnaGlkZGVuJywgb3ZlcmZsb3c6ICdoaWRkZW4nLCBlYXNpbmc6ICdlYXNlLW91dCcsIG9mZnNldDogMCB9KSxcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6IEFVVE9fU1RZTEUsIG9wYWNpdHk6IEFVVE9fU1RZTEUsIHZpc2liaWxpdHk6IEFVVE9fU1RZTEUsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1vdXQnLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5jb25zdCBmYWRlSW5FeHBhbmRSaWdodCA9ICgpID0+XG4gIGFuaW1hdGlvbihcbiAgICBhbmltYXRlKFxuICAgICAgJ3t7ZHVyYXRpb259fW1zIHt7ZGVsYXl9fW1zJyxcbiAgICAgIGtleWZyYW1lcyhbXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6ICcwJywgb3BhY2l0eTogMCwgdmlzaWJpbGl0eTogJ2hpZGRlbicsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1vdXQnLCBvZmZzZXQ6IDAgfSksXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6IEFVVE9fU1RZTEUsIG9wYWNpdHk6IEFVVE9fU1RZTEUsIHZpc2liaWxpdHk6IEFVVE9fU1RZTEUsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1vdXQnLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5jb25zdCBjb2xsYXBzZSA9ICgpID0+XG4gIGFuaW1hdGlvbihcbiAgICBhbmltYXRlKFxuICAgICAgJ3t7ZHVyYXRpb259fW1zIHt7ZGVsYXl9fW1zJyxcbiAgICAgIGtleWZyYW1lcyhbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFLCB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFLCBvdmVyZmxvdzogJ2hpZGRlbicsIGVhc2luZzogJ2Vhc2UtaW4nLCBvZmZzZXQ6IDAgfSksXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMCcsIHZpc2liaWxpdHk6ICdoaWRkZW4nLCBvdmVyZmxvdzogJ2hpZGRlbicsIGVhc2luZzogJ2Vhc2UtaW4nLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5jb25zdCBjb2xsYXBzZUxlZnQgPSAoKSA9PlxuICBhbmltYXRpb24oXG4gICAgYW5pbWF0ZShcbiAgICAgICd7e2R1cmF0aW9ufX1tcyB7e2RlbGF5fX1tcycsXG4gICAgICBrZXlmcmFtZXMoW1xuICAgICAgICBzdHlsZSh7IHdpZHRoOiBBVVRPX1NUWUxFLCB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFLCBvdmVyZmxvdzogJ2hpZGRlbicsIGVhc2luZzogJ2Vhc2UtaW4nLCBvZmZzZXQ6IDAgfSksXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6ICcwJywgdmlzaWJpbGl0eTogJ2hpZGRlbicsIG92ZXJmbG93OiAnaGlkZGVuJywgZWFzaW5nOiAnZWFzZS1pbicsIG9mZnNldDogMSB9KVxuICAgICAgXSlcbiAgICApXG4gICk7XG5cbmNvbnN0IGZhZGVPdXRDb2xsYXBzZSA9ICgpID0+XG4gIGFuaW1hdGlvbihcbiAgICBhbmltYXRlKFxuICAgICAgJ3t7ZHVyYXRpb259fW1zIHt7ZGVsYXl9fW1zJyxcbiAgICAgIGtleWZyYW1lcyhbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFLCBvcGFjaXR5OiBBVVRPX1NUWUxFLCB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFLCBvdmVyZmxvdzogJ2hpZGRlbicsIGVhc2luZzogJ2Vhc2UtaW4nLCBvZmZzZXQ6IDAgfSksXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMCcsIG9wYWNpdHk6IDAsIHZpc2liaWxpdHk6ICdoaWRkZW4nLCBvdmVyZmxvdzogJ2hpZGRlbicsIGVhc2luZzogJ2Vhc2UtaW4nLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5jb25zdCBmYWRlT3V0Q29sbGFwc2VMZWZ0ID0gKCkgPT5cbiAgYW5pbWF0aW9uKFxuICAgIGFuaW1hdGUoXG4gICAgICAne3tkdXJhdGlvbn19bXMge3tkZWxheX19bXMnLFxuICAgICAga2V5ZnJhbWVzKFtcbiAgICAgICAgc3R5bGUoeyB3aWR0aDogQVVUT19TVFlMRSwgb3BhY2l0eTogQVVUT19TVFlMRSwgdmlzaWJpbGl0eTogQVVUT19TVFlMRSwgb3ZlcmZsb3c6ICdoaWRkZW4nLCBlYXNpbmc6ICdlYXNlLWluJywgb2Zmc2V0OiAwIH0pLFxuICAgICAgICBzdHlsZSh7IHdpZHRoOiAnMCcsIG9wYWNpdHk6IDAsIHZpc2liaWxpdHk6ICdoaWRkZW4nLCBvdmVyZmxvdzogJ2hpZGRlbicsIGVhc2luZzogJ2Vhc2UtaW4nLCBvZmZzZXQ6IDEgfSlcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kT25FbnRlckFuaW1hdGlvbihvcHRpb25zPzogSUFuaW1hdGlvbk9wdGlvbnMpOiBBbmltYXRpb25UcmlnZ2VyTWV0YWRhdGEge1xuICByZXR1cm4gdHJpZ2dlcigob3B0aW9ucyAmJiBvcHRpb25zLmFuY2hvcikgfHwgJ2V4cGFuZE9uRW50ZXInLCBbXG4gICAgdHJhbnNpdGlvbignOmVudGVyJywgYW5pbWF0aW9uKFtzdHlsZSh7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0pLCAuLi51c2VBbmltYXRpb25JbmNsdWRpbmdDaGlsZHJlbihleHBhbmQoKSwgb3B0aW9ucyldKSwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGRlbGF5OiAob3B0aW9ucyAmJiBvcHRpb25zLmRlbGF5KSB8fCAwLFxuICAgICAgICBkdXJhdGlvbjogKG9wdGlvbnMgJiYgb3B0aW9ucy5kdXJhdGlvbikgfHwgREVGQVVMVF9EVVJBVElPTlxuICAgICAgfVxuICAgIH0pXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kUmlnaHRPbkVudGVyQW5pbWF0aW9uKG9wdGlvbnM/OiBJQW5pbWF0aW9uT3B0aW9ucyk6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSB7XG4gIHJldHVybiB0cmlnZ2VyKChvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yKSB8fCAnZXhwYW5kUmlnaHRPbkVudGVyJywgW1xuICAgIHRyYW5zaXRpb24oJzplbnRlcicsIGFuaW1hdGlvbihbc3R5bGUoeyB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSwgLi4udXNlQW5pbWF0aW9uSW5jbHVkaW5nQ2hpbGRyZW4oZXhwYW5kUmlnaHQoKSwgb3B0aW9ucyldKSwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGRlbGF5OiAob3B0aW9ucyAmJiBvcHRpb25zLmRlbGF5KSB8fCAwLFxuICAgICAgICBkdXJhdGlvbjogKG9wdGlvbnMgJiYgb3B0aW9ucy5kdXJhdGlvbikgfHwgREVGQVVMVF9EVVJBVElPTlxuICAgICAgfVxuICAgIH0pXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGFwc2VPbkxlYXZlQW5pbWF0aW9uKG9wdGlvbnM/OiBJQW5pbWF0aW9uT3B0aW9ucyk6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSB7XG4gIHJldHVybiB0cmlnZ2VyKChvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yKSB8fCAnY29sbGFwc2VPbkxlYXZlJywgW1xuICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFsuLi51c2VBbmltYXRpb25JbmNsdWRpbmdDaGlsZHJlbihjb2xsYXBzZSgpLCBvcHRpb25zKV0sIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBkZWxheTogKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxheSkgfHwgMCxcbiAgICAgICAgZHVyYXRpb246IChvcHRpb25zICYmIG9wdGlvbnMuZHVyYXRpb24pIHx8IERFRkFVTFRfRFVSQVRJT05cbiAgICAgIH1cbiAgICB9KVxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxhcHNlTGVmdE9uTGVhdmVBbmltYXRpb24ob3B0aW9ucz86IElBbmltYXRpb25PcHRpb25zKTogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhIHtcbiAgcmV0dXJuIHRyaWdnZXIoKG9wdGlvbnMgJiYgb3B0aW9ucy5hbmNob3IpIHx8ICdjb2xsYXBzZUxlZnRPbkxlYXZlJywgW1xuICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFsuLi51c2VBbmltYXRpb25JbmNsdWRpbmdDaGlsZHJlbihjb2xsYXBzZUxlZnQoKSwgb3B0aW9ucyldLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZGVsYXk6IChvcHRpb25zICYmIG9wdGlvbnMuZGVsYXkpIHx8IDAsXG4gICAgICAgIGR1cmF0aW9uOiAob3B0aW9ucyAmJiBvcHRpb25zLmR1cmF0aW9uKSB8fCBERUZBVUxUX0RVUkFUSU9OXG4gICAgICB9XG4gICAgfSlcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWRlSW5FeHBhbmRPbkVudGVyQW5pbWF0aW9uKG9wdGlvbnM/OiBJQW5pbWF0aW9uT3B0aW9ucyk6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSB7XG4gIHJldHVybiB0cmlnZ2VyKChvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yKSB8fCAnZmFkZUluRXhwYW5kT25FbnRlcicsIFtcbiAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBhbmltYXRpb24oW3N0eWxlKHsgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSksIC4uLnVzZUFuaW1hdGlvbkluY2x1ZGluZ0NoaWxkcmVuKGZhZGVJbkV4cGFuZCgpLCBvcHRpb25zKV0pLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZGVsYXk6IChvcHRpb25zICYmIG9wdGlvbnMuZGVsYXkpIHx8IDAsXG4gICAgICAgIGR1cmF0aW9uOiAob3B0aW9ucyAmJiBvcHRpb25zLmR1cmF0aW9uKSB8fCBERUZBVUxUX0RVUkFUSU9OXG4gICAgICB9XG4gICAgfSlcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWRlSW5FeHBhbmRSaWdodE9uRW50ZXJBbmltYXRpb24ob3B0aW9ucz86IElBbmltYXRpb25PcHRpb25zKTogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhIHtcbiAgcmV0dXJuIHRyaWdnZXIoKG9wdGlvbnMgJiYgb3B0aW9ucy5hbmNob3IpIHx8ICdmYWRlSW5FeHBhbmRSaWdodE9uRW50ZXInLCBbXG4gICAgdHJhbnNpdGlvbignOmVudGVyJywgYW5pbWF0aW9uKFtzdHlsZSh7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0pLCAuLi51c2VBbmltYXRpb25JbmNsdWRpbmdDaGlsZHJlbihmYWRlSW5FeHBhbmRSaWdodCgpLCBvcHRpb25zKV0pLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZGVsYXk6IChvcHRpb25zICYmIG9wdGlvbnMuZGVsYXkpIHx8IDAsXG4gICAgICAgIGR1cmF0aW9uOiAob3B0aW9ucyAmJiBvcHRpb25zLmR1cmF0aW9uKSB8fCBERUZBVUxUX0RVUkFUSU9OXG4gICAgICB9XG4gICAgfSlcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWRlT3V0Q29sbGFwc2VPbkxlYXZlQW5pbWF0aW9uKG9wdGlvbnM/OiBJQW5pbWF0aW9uT3B0aW9ucyk6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSB7XG4gIHJldHVybiB0cmlnZ2VyKChvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yKSB8fCAnZmFkZU91dENvbGxhcHNlT25MZWF2ZScsIFtcbiAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbLi4udXNlQW5pbWF0aW9uSW5jbHVkaW5nQ2hpbGRyZW4oZmFkZU91dENvbGxhcHNlKCksIG9wdGlvbnMpXSwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGRlbGF5OiAob3B0aW9ucyAmJiBvcHRpb25zLmRlbGF5KSB8fCAwLFxuICAgICAgICBkdXJhdGlvbjogKG9wdGlvbnMgJiYgb3B0aW9ucy5kdXJhdGlvbikgfHwgREVGQVVMVF9EVVJBVElPTlxuICAgICAgfVxuICAgIH0pXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFkZU91dENvbGxhcHNlTGVmdE9uTGVhdmVBbmltYXRpb24ob3B0aW9ucz86IElBbmltYXRpb25PcHRpb25zKTogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhIHtcbiAgcmV0dXJuIHRyaWdnZXIoKG9wdGlvbnMgJiYgb3B0aW9ucy5hbmNob3IpIHx8ICdmYWRlT3V0Q29sbGFwc2VMZWZ0T25MZWF2ZScsIFtcbiAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbLi4udXNlQW5pbWF0aW9uSW5jbHVkaW5nQ2hpbGRyZW4oZmFkZU91dENvbGxhcHNlTGVmdCgpLCBvcHRpb25zKV0sIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBkZWxheTogKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxheSkgfHwgMCxcbiAgICAgICAgZHVyYXRpb246IChvcHRpb25zICYmIG9wdGlvbnMuZHVyYXRpb24pIHx8IERFRkFVTFRfRFVSQVRJT05cbiAgICAgIH1cbiAgICB9KVxuICBdKTtcbn1cbiJdfQ==