/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        var v = factory(null, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === "function" && define.amd) {
        define("@angular/common/locales/extra/vi", ["require", "exports"], factory);
    }
})(function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    // THIS CODE IS GENERATED - DO NOT MODIFY
    // See angular/tools/gulp-tasks/cldr/extract.js
    var u = undefined;
    exports.default = [
        [
            ['nửa đêm', 'tr', 'sáng', 'chiều', 'tối', 'đêm'],
            ['nửa đêm', 'TR', 'sáng', 'chiều', 'tối', 'đêm'], u
        ],
        [
            ['nửa đêm', 'trưa', 'sáng', 'chiều', 'tối', 'đêm'],
            ['nửa đêm', 'TR', 'sáng', 'chiều', 'tối', 'đêm'],
            ['nửa đêm', 'trưa', 'sáng', 'chiều', 'tối', 'đêm']
        ],
        ['00:00', '12:00', ['04:00', '12:00'], ['12:00', '18:00'], ['18:00', '21:00'], ['21:00', '04:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS92aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ2hELENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3BEO1FBQ0Q7WUFDRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ2xELENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDaEQsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztTQUNuRDtRQUNELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIFtcbiAgICBbJ27hu61hIMSRw6ptJywgJ3RyJywgJ3PDoW5nJywgJ2NoaeG7gXUnLCAndOG7kWknLCAnxJHDqm0nXSxcbiAgICBbJ27hu61hIMSRw6ptJywgJ1RSJywgJ3PDoW5nJywgJ2NoaeG7gXUnLCAndOG7kWknLCAnxJHDqm0nXSwgdVxuICBdLFxuICBbXG4gICAgWydu4butYSDEkcOqbScsICd0csawYScsICdzw6FuZycsICdjaGnhu4F1JywgJ3Thu5FpJywgJ8SRw6ptJ10sXG4gICAgWydu4butYSDEkcOqbScsICdUUicsICdzw6FuZycsICdjaGnhu4F1JywgJ3Thu5FpJywgJ8SRw6ptJ10sXG4gICAgWydu4butYSDEkcOqbScsICd0csawYScsICdzw6FuZycsICdjaGnhu4F1JywgJ3Thu5FpJywgJ8SRw6ptJ11cbiAgXSxcbiAgWycwMDowMCcsICcxMjowMCcsIFsnMDQ6MDAnLCAnMTI6MDAnXSwgWycxMjowMCcsICcxODowMCddLCBbJzE4OjAwJywgJzIxOjAwJ10sIFsnMjE6MDAnLCAnMDQ6MDAnXV1cbl07XG4iXX0=