/**
 * @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/lo", ["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 = [
        [
            ['ທ່ຽງຄືນ', 'ຕອນທ່ຽງ', 'ຕອນເຊົ້າ', 'ຕອນທ່ຽງ', 'ຕອນແລງ', 'ກາງຄືນ'],
            ['ທ່ຽງຄືນ', 'ຕອນທ່ຽງ', 'ຕອນເຊົ້າ', 'ຕອນບ່າຍ', 'ຕອນແລງ', 'ກາງຄືນ'],
            ['ທ່ຽງຄືນ', 'ຕອນທ່ຽງ', 'ຕອນເຊົ້າ', 'ຕອນບ່າຍ', 'ຕອນແລງ', 'ຕອນກາງຄືນ']
        ],
        [
            [
                'ທ່ຽງ​ຄືນ', 'ຕອນທ່ຽງ', '​ເຊົ້າ', 'ສ', 'ແລງ',
                '​ກາງ​ຄືນ'
            ],
            [
                'ທ່ຽງ​ຄືນ', 'ທ່ຽງ', '​ເຊົ້າ', 'ສວຍ', 'ແລງ',
                '​ກາງ​ຄືນ'
            ],
            ['ທ່ຽງຄືນ', 'ຕອນທ່ຽງ', '​ເຊົ້າ', 'ສວຍ', 'ແລງ', '​ກາງ​ຄືນ']
        ],
        ['00:00', '12:00', ['05:00', '12:00'], ['12:00', '16:00'], ['16:00', '20:00'], ['20:00', '05:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9sby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1lBQ2pFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7WUFDakUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztTQUNyRTtRQUNEO1lBQ0U7Z0JBQ0UsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUs7Z0JBQzNDLFVBQVU7YUFDWDtZQUNEO2dCQUNFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLO2dCQUMxQyxVQUFVO2FBQ1g7WUFDRCxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDO1NBQzNEO1FBQ0QsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ25HLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gVEhJUyBDT0RFIElTIEdFTkVSQVRFRCAtIERPIE5PVCBNT0RJRllcbi8vIFNlZSBhbmd1bGFyL3Rvb2xzL2d1bHAtdGFza3MvY2xkci9leHRyYWN0LmpzXG5cbmNvbnN0IHUgPSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IFtcbiAgW1xuICAgIFsn4LqX4LuI4Lq94LqH4LqE4Lq34LqZJywgJ+C6leC6reC6meC6l+C7iOC6veC6hycsICfgupXguq3gupngu4Dguorgurvgu4ngurInLCAn4LqV4Lqt4LqZ4LqX4LuI4Lq94LqHJywgJ+C6leC6reC6meC7geC6peC6hycsICfguoHgurLguofguoTgurfgupknXSxcbiAgICBbJ+C6l+C7iOC6veC6h+C6hOC6t+C6mScsICfgupXguq3gupngupfgu4jgur3guocnLCAn4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyJywgJ+C6leC6reC6meC6muC7iOC6suC6jScsICfgupXguq3gupngu4HguqXguocnLCAn4LqB4Lqy4LqH4LqE4Lq34LqZJ10sXG4gICAgWyfgupfgu4jgur3guofguoTgurfgupknLCAn4LqV4Lqt4LqZ4LqX4LuI4Lq94LqHJywgJ+C6leC6reC6meC7gOC6iuC6u+C7ieC6sicsICfgupXguq3gupnguprgu4jgurLguo0nLCAn4LqV4Lqt4LqZ4LuB4Lql4LqHJywgJ+C6leC6reC6meC6geC6suC6h+C6hOC6t+C6mSddXG4gIF0sXG4gIFtcbiAgICBbXG4gICAgICAn4LqX4LuI4Lq94LqH4oCL4LqE4Lq34LqZJywgJ+C6leC6reC6meC6l+C7iOC6veC6hycsICfigIvgu4Dguorgurvgu4ngurInLCAn4LqqJywgJ+C7geC6peC6hycsXG4gICAgICAn4oCL4LqB4Lqy4LqH4oCL4LqE4Lq34LqZJ1xuICAgIF0sXG4gICAgW1xuICAgICAgJ+C6l+C7iOC6veC6h+KAi+C6hOC6t+C6mScsICfgupfgu4jgur3guocnLCAn4oCL4LuA4LqK4Lq74LuJ4LqyJywgJ+C6quC6p+C6jScsICfgu4HguqXguocnLFxuICAgICAgJ+KAi+C6geC6suC6h+KAi+C6hOC6t+C6mSdcbiAgICBdLFxuICAgIFsn4LqX4LuI4Lq94LqH4LqE4Lq34LqZJywgJ+C6leC6reC6meC6l+C7iOC6veC6hycsICfigIvgu4Dguorgurvgu4ngurInLCAn4Lqq4Lqn4LqNJywgJ+C7geC6peC6hycsICfigIvguoHgurLguofigIvguoTgurfgupknXVxuICBdLFxuICBbJzAwOjAwJywgJzEyOjAwJywgWycwNTowMCcsICcxMjowMCddLCBbJzEyOjAwJywgJzE2OjAwJ10sIFsnMTY6MDAnLCAnMjA6MDAnXSwgWycyMDowMCcsICcwNTowMCddXVxuXTtcbiJdfQ==